Как получить цвет из шестнадцатеричного цветового кода using.NET?
Как я могу получить цвет из шестнадцатеричного цветового кода (например,#FFDFD991)?
Я читаю файл и получаю шестнадцатеричный цветовой код. Мне нужно создать соответствующий System.Windows.Media.Color экземпляр для шестнадцатеричного цветового кода. Есть ли встроенный метод в рамках для этого?
14 ответов:
Я предполагаю, что это код ARGB... Вы имеете в виду
System.Drawing.ColorилиSystem.Windows.Media.Color? Последний используется, например, в WPF. Я еще не видел, чтобы кто-нибудь упоминал об этом, так что на всякий случай вы искали его:using System.Windows.Media; Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");
предполагая, что вы имеете в виду коды RGB типа HTML (называемые шестнадцатеричными кодами, такими как #FFCC66), используйте ColorTranslator класс:
System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FFCC66");Если, однако, вы используете шестнадцатеричный код ARGB, вы можете использовать ColorConverter класс из системы.Окна.Пространство имен мультимедиа:
Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color; //or = (Color) ColorConverter.ConvertFromString("#FFCC66") ;
Если вы не хотите использовать ColorTranslator, вы можете сделать это легко:
string colorcode = "#FFFFFF00"; int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber); Color clr = Color.FromArgb(argb);цветовой код - это просто шестнадцатеричное представление значения 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 находится в системе.Глобализация.
примечание 2.: пожалуйста, укажите свою собственную ошибку проверка (цветовой код должен быть шестнадцатеричным значением из 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 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);
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)); }
вы можете использовать следующий код:
Color color = System.Drawing.ColorTranslator.FromHtml("#FFDFD991");
мне нужно было преобразовать шестнадцатеричный цветовой код в систему.Рисунок.Цвет, в частности оттенок Alice Blue в качестве фона на форме 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, следуя @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));
этот пост стал goto для тех, кто пытается преобразовать из шестнадцатеричного цветового кода в системный цвет. Поэтому я подумал, что добавлю комплексное решение, которое имеет дело как с 6-значными (RGB), так и с 8-значными (ARGB) шестнадцатеричными значениями.
по умолчанию, согласно Microsoft, при преобразовании из RGB в ARGB значение
значение альфа неявно 255 (полностью непрозрачно).
Это означает, что путем добавления FF к 6-значному (RGB) шестнадцатеричному цветовому коду он становится 8-значный ARGB шестнадцатеричный цветовой код. Поэтому можно создать простой метод, который обрабатывает как ARGB, так и RGB hex и преобразует их в соответствующую цветовую структуру.
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)"); }Это было вдохновлено ответом Ганса Кестинга.
вы можете ознакомиться Silverlight / WPF устанавливает эллипс с шестнадцатеричным цветом для использования шестнадцатеричного значения:
your_contorl.Color = DirectCast(ColorConverter.ConvertFromString("#D8E0A627"), Color)
WPF:
using System.Windows.Media; //hex to color Color color = (Color)ColorConverter.ConvertFromString("#7AFF7A7A"); //color to hex string hexcolor = color.ToString();
Если вы имеете в виду хэш-код, как в
.GetHashCode(), Я боюсь, что вы не можете вернуться. Хэш-функции не являются двунаправленными, вы можете идти вперед, а не назад.следуйте предложению Oded, если вам нужно получить цвет на основе шестнадцатеричного значения цвета.
Comments