正在将十六进制颜色转换为整数
本文关键字:转换 整数 颜色 十六进制 | 更新日期: 2023-09-27 18:26:41
这是我在数据库中的整数颜色:"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"
现在的问题是,我无法将这个颜色字符串解析回integer,以便将其保存在数据库中。我所拥有的是:
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工作。任何帮助!!!提前感谢
这将产生您想要的正确十进制值:
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
下面是一个工作示例
您可以使用下面的函数,也可以将其作为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;
}
如果您制作了一个扩展方法,您可能希望为该方法选择一个更好的名称。