如何从十六进制颜色代码(例如#FFDFD991)中获得颜色?
我正在读取一个文件,并得到一个十六进制的颜色代码。我需要为十六进制颜色代码创建相应的System.Windows.Media.Color实例。框架中是否有一个内置的方法来做到这一点?
如何从十六进制颜色代码(例如#FFDFD991)中获得颜色?
我正在读取一个文件,并得到一个十六进制的颜色代码。我需要为十六进制颜色代码创建相应的System.Windows.Media.Color实例。框架中是否有一个内置的方法来做到这一点?
当前回答
我猜这是ARGB代码…你指的是system。drawing。color还是system。windows。media。color ?例如,后者在WPF中使用。我还没见过有人提到它,所以以防你在找它:
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);
colorcode只是ARGB值的十六进制表示。
EDIT
如果你需要使用4个值而不是一个整数,你可以使用这个(结合几个注释):
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));
注1:NumberStyles在System.Globalization中。 注2:请提供您自己的错误检查(colorcode应该是6或8个字符的十六进制值)
如果你指的是. gethashcode()中的HashCode,恐怕你不能返回。哈希函数不是双向的,你只能“向前”,不能向后。
如果需要根据颜色的十六进制值获取颜色,请遵循Oded的建议。
你可以使用ColorConverter.ConvertFromString(string)方法将你的字符串(十六进制)转换为颜色。
示例:(这适用于ARGB,如“#FF1E1E1E”。
Control.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#1E1E1E"));
我需要将HEX颜色代码转换为System.Drawing。颜色,特别是在WPF表单上作为背景的爱丽丝蓝的阴影,并发现找到答案的时间比预期的要长:
using System.Windows.Media;
--
System.Drawing.Color myColor = System.Drawing.ColorTranslator.FromHtml("#EFF3F7");
this.Background = new SolidColorBrush(System.Windows.Media.Color.FromArgb(myColor.A, myColor.R, myColor.G, myColor.B));
下面的三个变体给出了完全相同的颜色。最后一个有在Visual Studio 2010 IDE中用适当的颜色高亮显示的好处(可能是ReSharper在做这件事)。
var cc1 = System.Drawing.ColorTranslator.FromHtml("#479DEE");
var cc2 = System.Drawing.Color.FromArgb(0x479DEE);
var cc3 = System.Drawing.Color.FromArgb(0x47, 0x9D, 0xEE);