2013-08-07 6 views
2

Это мой целочисленный цвет в базе данных: «8689404».Преобразование шестнадцатеричного цвета в целое число

я изменить его цвет следующим образом:

Color = ColorHelper.FromArgb(255, 
     byte.Parse(Event.LABELCOLOR.Value.ToString("X8").Substring(6, 2), NumberStyles.HexNumber), 
     byte.Parse(Event.LABELCOLOR.Value.ToString("X8").Substring(4, 2), NumberStyles.HexNumber), 
     byte.Parse(Event.LABELCOLOR.Value.ToString("X8").Substring(2, 2), NumberStyles.HexNumber)) 

это дает мне цвет строки «# FFFC9684»

Теперь, что проблема заключается в том, что я не смог разобрать этот цвет строку обратно в целое, так что я могу сохранить его в базе данных. Что я до сих пор является:

byte A = byte.Parse(labelcolor.Color.TrimStart('#').Substring(0, 2), System.Globalization.NumberStyles.HexNumber); 
byte B = byte.Parse(labelcolor.Color.TrimStart('#').Substring(6, 2), System.Globalization.NumberStyles.HexNumber); 
byte G = byte.Parse(labelcolor.Color.TrimStart('#').Substring(4, 2), System.Globalization.NumberStyles.HexNumber); 
byte R = byte.Parse(labelcolor.Color.TrimStart('#').Substring(2, 2), System.Globalization.NumberStyles.HexNumber); 

это дает мне:

A = 255 
B = 132 
G = 150 
R = 252 

Эти значения являются правильными, но я не могу сравнить их с "8689404"

По моим выводам:

B = 132 = 84 
G = 150 = 96 
R = 252 = FC 
A = 255 = FF 

Это все, что у меня есть, как у меня есть целое число для этой цветной строки. Я работаю в WinRT. Любая помощь!!! спасибо заранее

ответ

6

Это даст правильное значение десятичного вы хотите:

int decValue = int.Parse("8496FC", System.Globalization.NumberStyles.HexNumber); 

Как вы можете видеть шестнадцатеричное значение используется для производства десятичного значения состоит из следующих компонентов цвета:

B (84) G (96) R (FC)

с компонентом A, сброшенным.

Это можно рассчитать с помощью substring на вашем полном шестнадцатеричный цвет, как так:

string colour = labelcolor.Color.TrimStart('#'); 
string R = colour.Substring(2, 2); 
string G = colour.Substring(4, 2); 
string B = colour.Substring(6, 2); 

Что вы можете использовать так:

int decValue = int.Parse(B + G + R, System.Globalization.NumberStyles.HexNumber); 
//decValue = 8689404 

Here is a working example

+0

i ll 'попробуйте это завтра ... надеюсь, что это сработает ... спасибо –

+0

спасибо работе, как шарм :) –

0

Вы можете использовать что-то вроде функции ниже или сделать ее методом расширения на System.Drawing.Color:

void Main() 
{ 
    int intColor = 8689404; 
    var c = Color.FromArgb(255, Color.FromArgb(intColor)); 

    IsEqual(c, intColor); //prints True 
} 

//Assumes A = 255 
bool IsEqual(Color c, int i) 
{ 
    int j = (int)(c.ToArgb() & 0x00FFFFFF); 
    return i == j; 
} 

Если вы создаете метод расширения, вы можете выбрать лучшее имя для метода.

+0

вы правы, но, как я упоминаю, я работаю в WinRT, System.Drawing недоступен –

 Смежные вопросы

  • Нет связанных вопросов^_^