Как получить цвет из шестнадцатеричного кода цвета с помощью .NET?

Как получить цвет из шестнадцатеричного кода цвета (например, #FFDFD991)?

Я читаю файл и получаю шестнадцатеричный код цвета. Мне нужно создать соответствующий экземпляр System.Windows.Media.Color для шестнадцатеричного цветового кода. Есть ли в фреймворке встроенный метод для этого?

Комментарии к вопросу (13)
Решение

Я'м предполагая, что'ы в формате ARGB код... вы имеете в виду систему.Чертеж.Цвет и система.Окна.СМИ.Цвет? Последняя используется, например, в WPF. Я еще'т видел, чтобы кто-нибудь упоминал его пока нет, поэтому на всякий случай вы искали это:

using System.Windows.Media;

Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");
Комментарии (7)

Если вы имеете в виду RGB-коды HTML-типа (называемые Hex-кодами, например #FFCC66), используйте класс ColorTranslator:

System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FFCC66");

Если, однако, вы используете шестнадцатеричный код ARGB, вы можете использовать класс ColorConverter из пространства имен System.Windows.Media:

Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color;
//or      = (Color) ColorConverter.ConvertFromString("#FFCC66") ;
Комментарии (0)

Если вы Don'т хотите использовать ColorTranslator, вы можете сделать это легко:

string colorcode = "#FFFFFF00";
int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
Color clr = Color.FromArgb(argb);

В стекла colorcode является шестнадцатеричное представление о ценности формате ARGB.

Редактировать

Если вам нужно использовать 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 в системе.Глобализация. Примечание 2: пожалуйста обеспечьте вашу собственную проверку ошибок (стекла colorcode должно быть шестнадцатеричное значение 6 или 8 символов)

Комментарии (10)

Также это аккуратный метод расширения:

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();
Комментарии (8)

Ниже три варианта дают точно такого же цвета. Последний имеет преимущество быть выделены в Visual&ампер;усилитель; nbsp;студия&ампер;усилитель; nbsp;2010 язь (может быть, это'ы для ReSharper, который'ы делать) с соответствующего цвета.

var cc1 = System.Drawing.ColorTranslator.FromHtml("#479DEE");

var cc2 = System.Drawing.Color.FromArgb(0x479DEE);

var cc3 = System.Drawing.Color.FromArgb(0x47, 0x9D, 0xEE);
Комментарии (1)
    private Color FromHex(string hex)
    {
        if (hex.StartsWith("#"))
            hex = hex.Substring(1);

        if (hex.Length != 6) throw new Exception("Color not valid");

        return Color.FromArgb(
            int.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber),
            int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber),
            int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber));
    }
Комментарии (1)

Мне нужно, чтобы преобразовать шестнадцатеричный цветовой код в систему.Чертеж.Цвет, точнее оттенок Алиса синий в качестве фона на 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));
Комментарии (0)

Вы могли бы использовать следующий код:

Color color = System.Drawing.ColorTranslator.FromHtml("#FFDFD991");
Комментарии (0)

Если вы хотите сделать это с приложением Магазина Windows, после @Ганс Кестинг и @уклонение ответ:

    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));
Комментарии (0)

Этот пост стал Гото для тех, кто пытается преобразовать шестнадцатеричный код цвета в цветовой системе. Поэтому, я думал, что я'd-добавить комплексное решение, которое работает с 6-значный (RGB) и 8 цифр (формате ARGB) шестнадцатиричное значение.

По умолчанию, По данным Microsoft, при преобразовании из RGB в формате ARGB значение

Альфа-значение имплицитно 255 (полностью непрозрачный).

Это означает, добавив ФФ до 6-значный (для RGB) HEX код цвета становится 8-значный формате ARGB HEX код цвета. Поэтому простой метод может быть создан, который обрабатывает оба ARGB и RGB в шестнадцатеричный's и преобразует их в соответствующие цветовые структуры.

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

    }

Это был вдохновленный Ганс Кестинг'ы ответ.

Комментарии (0)

Вы можете ознакомиться с https://stackoverflow.com/questions/783384/silverlight-wpf-sets-ellipse-with-hexadecimal-colour/10378228#10378228 для использования шестнадцатеричного значения:

your_contorl.Color = DirectCast(ColorConverter.ConvertFromString("#D8E0A627"), Color)
Комментарии (0)

В WPF:

using System.Windows.Media;

//hex to color
Color color = (Color)ColorConverter.ConvertFromString("#7AFF7A7A");

//color to hex
string hexcolor = color.ToString();
Комментарии (1)

Если вы имеете в виду HashCode как в .GetHashCode(), боюсь, что вы не сможете вернуться назад. Хэш-функции не являются двунаправленными, вы можете идти 'вперед' только, а не назад.

Следуйте предложению Одеда, если вам нужно получить цвет на основе шестнадцатеричного значения цвета.

Комментарии (2)

Самое основное-это просто:

Color.ParseColor("#ff43a047")
Комментарии (1)