我们可以直接使用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;