咨询区
viky:
请问如何将一个16进制的 color code
转成 C# 中的 Color ?
我的业务场景中需要从文件读取一个 hex color code,然后我需要将该 code 转成 System.Windows.Media.Color
实例,不知道 .NET Framework 中是否有相关的支持类?
回答区
Thorarin:
从你提供的 color code
看,它是一个 ARGB 值,你可以将其转成 System.Drawing.Color
或 System.Windows.Media.Color
,参考如下代码:
using System.Windows.Media;
Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");
如果你不想使用 ColorTranslator
,我还有一种简单的方式。
string colorcode = "#FFFFFF00";
int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
Color clr = Color.FromArgb(argb);
或者你也可以每2个2个的截取来提取颜色值。
string colorcode = "#FFFFFF00";
colorcode = colorcode.TrimStart('#');
Color col; // from System.Drawing or System.Windows.Media
if (colorcode.Length == 6)
col = Color.FromArgb(255, // hardcoded opaque
int.Parse(colorcode.Substring(0,2), NumberStyles.HexNumber),
int.Parse(colorcode.Substring(2,2), NumberStyles.HexNumber),
int.Parse(colorcode.Substring(4,2), NumberStyles.HexNumber));
else // assuming length of 8
col = Color.FromArgb(
int.Parse(colorcode.Substring(0, 2), NumberStyles.HexNumber),
int.Parse(colorcode.Substring(2, 2), NumberStyles.HexNumber),
int.Parse(colorcode.Substring(4, 2), NumberStyles.HexNumber),
int.Parse(colorcode.Substring(6, 2), NumberStyles.HexNumber));
Oded:
如果你的 color code 是类似 HTML 中的 rgb 值,可以借助基础类库的 ColorTranslator
类,比如:
System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FFCC66");
当然,如果你是 ARGB 的话,得需要用 WPF 下的 ColorConverter
类。
Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color;
Jink:
我封装了一个简单粗暴的扩展方法。
static class ExtensionMethods
{
public static Color ToColor(this uint argb)
{
return Color.FromArgb((byte)((argb & -16777216)>> 0x18),
(byte)((argb & 0xff0000)>> 0x10),
(byte)((argb & 0xff00) >> 8),
(byte)(argb & 0xff));
}
}
接下来可以这么用。
Color color = 0xFFDFD991.ToColor();
点评区
几位大佬提供的几种方法都非常灵活,????????,学习了,收藏了!