将十六进制颜色转换为整数

时间:2013-08-07 13:55:13

标签: c# colors winrt-xaml argb

这是我在数据库中的整数颜色:“8689404”。

我将其更改为Color,如下所示:

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工作。任何帮助!!!提前谢谢

2 个答案:

答案 0 :(得分:7)

这将产生您想要的正确小数值:

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

答案 1 :(得分: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;
}

如果您使用扩展方法,您可能希望为该方法选择更好的名称。