如何从十六进制颜色代码(例如#FFDFD991)中获得颜色?

我正在读取一个文件,并得到一个十六进制的颜色代码。我需要为十六进制颜色代码创建相应的System.Windows.Media.Color实例。框架中是否有一个内置的方法来做到这一点?


当前回答

下面的三个变体给出了完全相同的颜色。最后一个有在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);

其他回答

我需要将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));

还有一个简洁的扩展方法:

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();

Use

System.Drawing.Color.FromArgb(myHashCode);

这篇文章已经成为任何试图从十六进制颜色代码转换为系统颜色的人的首选。因此,我认为我应该添加一个全面的解决方案,处理6位(RGB)和8位(ARGB)十六进制值。

默认情况下,根据微软,当从RGB转换为ARGB值

alpha值隐式为255(完全不透明)。

这意味着通过将FF添加到6位(RGB)十六进制颜色代码中,它就变成了8位ARGB十六进制颜色代码。因此,可以创建一个简单的方法来处理ARGB和RGB十六进制,并将它们转换为适当的颜色结构。

    public static System.Drawing.Color GetColorFromHexValue(string hex)
    {
        string cleanHex = hex.Replace("0x", "").TrimStart('#');

        if (cleanHex.Length == 6)
        {
            //Affix fully opaque alpha hex value of FF (225)
            cleanHex = "FF" + cleanHex;
        }

        int argb;

        if (Int32.TryParse(cleanHex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out argb))
        {
            return System.Drawing.Color.FromArgb(argb);
        }

        //If method hasn't returned a color yet, then there's a problem
        throw new ArgumentException("Invalid Hex value. Hex must be either an ARGB (8 digits) or RGB (6 digits)");

    }

这是受到汉斯·凯斯汀的回答的启发。

如果你想用Windows商店应用程序,后面跟着@Hans Kesting和@Jink回答:

    string colorcode = "#FFEEDDCC";
    int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
    tData.DefaultData = Color.FromArgb((byte)((argb & -16777216) >> 0x18),
                          (byte)((argb & 0xff0000) >> 0x10),
                          (byte)((argb & 0xff00) >> 8),
                          (byte)(argb & 0xff));