从argb数中获取单一颜色值

时间:2016-02-05 15:09:33

标签: c# colors hex

我正在学习C#以及我试图解决的以下问题是将一个数字存储为字符串并获取a,r,g,b值。

所以我想从

开始
string s = "4280427042";

int a = 255;
int r = 22;
int g = 22;
int b = 22;

最好的方法是什么?

3 个答案:

答案 0 :(得分:3)

您可以将字符串转换为无符号的32位整数,然后使用BitConverter来获取这样的单个字节:

string s = "4280427042";

uint argb = Convert.ToUInt32(s);

byte[] values = BitConverter.GetBytes(argb);

int a = values[3];
int r = values[2];
int g = values[1];
int b = values[0];

引自this MSDN reference

  

GetBytes方法返回的数组中的字节顺序取决于计算机体系结构是小端还是大端。

这意味着您需要注意字节的顺序。您可以使用BitConverter.IsLittleEndian来帮助您。

答案 1 :(得分:2)

您可以使用Color.FromArgb()并访问单个值,如下所示:

string s = "4280427042";
Color color = Color.FromArgb((int)uint.Parse(s));

int a = color.A;
int r = color.R;
int g = color.G;
int b = color.B;

请注意,如果uint.Parse不包含有效string,则uint可能会引发异常。最好使用uint.TryParse并进行一些错误处理。

UPDATE 感谢Flat Eric的提示:不要只使用int.Parse而是uint.Parse,因为值可能大于2147483648(就像示例一样)和所以不适合签名的int。

答案 2 :(得分:1)

看看PHPhotoLibrary。这是MSDN Article。 它会返回Color.FromArgb,让您访问a,r,g& b值。