Как получить цвет из шестнадцатеричного кода цвета (например, #FFDFD991
)?
Я читаю файл и получаю шестнадцатеричный код цвета. Мне нужно создать соответствующий экземпляр System.Windows.Media.Color
для шестнадцатеричного цветового кода. Есть ли в фреймворке встроенный метод для этого?
Я'м предполагая, что'ы в формате ARGB код... вы имеете в виду систему.Чертеж.Цвет
и система.Окна.СМИ.Цвет
? Последняя используется, например, в WPF. Я еще'т видел, чтобы кто-нибудь упоминал его пока нет, поэтому на всякий случай вы искали это:
using System.Windows.Media;
Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");
Если вы имеете в виду 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") ;
Если вы 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 символов)
Также это аккуратный метод расширения:
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();
Ниже три варианта дают точно такого же цвета. Последний имеет преимущество быть выделены в 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);
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));
}
Мне нужно, чтобы преобразовать шестнадцатеричный цветовой код в систему.Чертеж.Цвет, точнее оттенок Алиса синий в качестве фона на 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));
Если вы хотите сделать это с приложением Магазина 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));
Этот пост стал Гото для тех, кто пытается преобразовать шестнадцатеричный код цвета в цветовой системе. Поэтому, я думал, что я'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)");
}
Это был вдохновленный Ганс Кестинг'ы ответ.
Вы можете ознакомиться с https://stackoverflow.com/questions/783384/silverlight-wpf-sets-ellipse-with-hexadecimal-colour/10378228#10378228 для использования шестнадцатеричного значения:
your_contorl.Color = DirectCast(ColorConverter.ConvertFromString("#D8E0A627"), Color)
Если вы имеете в виду HashCode как в .GetHashCode()
, боюсь, что вы не сможете вернуться назад. Хэш-функции не являются двунаправленными, вы можете идти 'вперед' только, а не назад.
Следуйте предложению Одеда, если вам нужно получить цвет на основе шестнадцатеричного значения цвета.
Используйте
System.Drawing.Color.FromArgb(myHashCode);