关于C#中转换16进制颜色值的说明

我们可以直接使用ColorTranslator类的静态方法ToHtml和FromHtml将大部分Color对象和16进制颜色值之间进行相互转换。

// 将html中表示的颜色值转换为Color对象,其中包括了24位(#FFFFFF)和32位(#FFFFFFFF)的16进制颜色值
Color color = ColorTranslator.FromHtml("#FFFFFFFF");
// 将Color对象转换为html中表示的颜色值,该方法会将已知名称的Color对象直接转换成颜色的名称(如“Red”),而将非已知名称的颜色转换成24位的16进制颜色值(只有rgb值,没有alpha值)
string html = ColorTranslator.ToHtml(Color.Red);

可以看出“ColorTranslator.FromHtml”方法足以满足我们将16进制颜色值转换为Color对象,但是“ColorTranslator.ToHtml”方法虽然可以将Color对象转换成16进制颜色值,但其转换是不全面的,它针对的是HTML颜色值,丢失了alpha值,而且会将已知名称的Color对象直接转换成颜色的名称,不符合16进制的要求,因此我们可以使用以下方法进行转换:

// 要转换的颜色
Color color = Color.FromArgb(255, 255, 255, 255);
// 颜色的argb值
byte[] buffer = new byte[] { color.A, color.R, color.G, color.B };
// 将每个颜色值分别转换为8位16进制字符串
string html = "#";
foreach (byte item in buffer)
{
    html += string.Format("{0:X2}", item);
}
// 获取32位16进制颜色值
return html;