конвертировать шестнадцатеричный код в имя цвета

Как я могу преобразовать этот hexa code = #2088C1 в название цвета Like Blue или Red

Моя цель – я хочу получить название цвета, например, «синий» для данного гекса-кода

Я пробовал код ниже, но он не выдавал никакого имени цвета.

 System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#2088C1"); Color col = ColorConverter.ConvertFromString("#2088C1") as Color; 

но это не дает название цвета, как этот «aquablue»,

Я использую winforms приложения с c #

Я наткнулся на немецкий сайт, который делает именно то, что вы хотите:

 ///  /// Gets the System.Drawing.Color object from hex string. ///  /// The hex string. ///  private System.Drawing.Color GetSystemDrawingColorFromHexString(string hexString) { if (!System.Text.RegularExpressions.Regex.IsMatch(hexString, @"[#]([0-9]|[af]|[AF]){6}\b")) throw new ArgumentException(); int red = int.Parse(hexString.Substring(1, 2), NumberStyles.HexNumber); int green = int.Parse(hexString.Substring(3, 2), NumberStyles.HexNumber); int blue = int.Parse(hexString.Substring(5, 2), NumberStyles.HexNumber); return Color.FromArgb(red, green, blue); } 

Чтобы получить имя цвета, вы можете использовать его следующим образом, чтобы получить KnownColor :

 private KnownColor GetColor(string colorCode) { Color color = GetSystemDrawingColorFromHexString(colorCode); return color.GetKnownColor(); } 

Однако System.Color.GetKnownColor похоже, удаляется в более новых версиях .NET.

Используйте этот метод

 Color myColor = ColorTranslator.FromHtml(htmlColor); 

Также см. Ссылку

Это можно сделать с небольшим reflectionм. Не оптимизирован, но он работает:

 string GetColorName(Color color) { var colorProperties = typeof(Color) .GetProperties(BindingFlags.Public | BindingFlags.Static) .Where(p => p.PropertyType == typeof(Color)); foreach(var colorProperty in colorProperties) { var colorPropertyValue = (Color)colorProperty.GetValue(null, null); if(colorPropertyValue.R == color.R && colorPropertyValue.G == color.G && colorPropertyValue.B == color.B) { return colorPropertyValue.Name; } } //If unknown color, fallback to the hex value //(or you could return null, "Unkown" or whatever you want) return ColorTranslator.ToHtml(color); } 

Я просто придумал это:

 enum MatchType { NoMatch, ExactMatch, ClosestMatch }; static MatchType FindColour (Color colour, out string name) { MatchType result = MatchType.NoMatch; int least_difference = 0; name = ""; foreach (PropertyInfo system_colour in typeof (Color).GetProperties (BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy)) { Color system_colour_value = (Color) system_colour.GetValue (null, null); if (system_colour_value == colour) { name = system_colour.Name; result = MatchType.ExactMatch; break; } int a = colour.A - system_colour_value.A, r = colour.R - system_colour_value.R, g = colour.G - system_colour_value.G, b = colour.B - system_colour_value.B, difference = a * a + r * r + g * g + b * b; if (result == MatchType.NoMatch || difference < least_difference) { result = MatchType.ClosestMatch; name = system_colour.Name; least_difference = difference; } } return result; } static void Main (string [] args) { string colour; MatchType match_type = FindColour (Color.FromArgb (0x2088C1), out colour); Console.WriteLine (colour + " is the " + match_type.ToString ()); match_type = FindColour (Color.AliceBlue, out colour); Console.WriteLine (colour + " is the " + match_type.ToString ()); } 

Для этого нет готовой функции. Вам нужно будет пройти через список известных цветов и сравнить RGB каждого известного цвета с RGB неизвестного.

Посмотрите эту ссылку: http://bytes.com/topic/visual-basic-net/answers/365789-argb-color-know-color-name

Если у вас есть доступ к assemblyм SharePoint, Microsoft.SharePoint содержит class Microsoft.SharePoint.Utilities.ThemeColor со статическим методом GetScreenNameForColor который принимает объект System.Drawing.Color и возвращает string описывающую его. Существует около 20 различных названий цветов с легкими и темными вариациями, которые он может вернуть.

Это старый пост, но здесь оптимизированный конвертер Color to KnownColor, поскольку встроенный .NET ToKnownColor () работает некорректно с adhoc Color structs. В первый раз, когда вы вызываете этот код, он будет лениво загружать известные цветовые значения и делать незначительный перфекционный удар. Последовательные вызовы функции – это простой поиск слова и быстрый поиск.

 public static class ColorExtensions { private static Lazy> knownColors = new Lazy>(() => { Dictionary @out = new Dictionary(); foreach (var val in Enum.GetValues(typeof(KnownColor))) { Color col = Color.FromKnownColor((KnownColor)val); @out[col.PackColor()] = (KnownColor)val; } return @out; }); /// Packs a Color structure into a single uint (argb format). /// The color to package. /// uint containing the packed color. public static uint PackColor(this Color color) => (uint)((color.A << 24) | (color.R << 16) | (color.G << 8) | (color.B << 0)); /// Unpacks a uint containing a Color structure. /// The color to unpackage. /// A new Color structure containing the color defined by color. public static Color UnpackColor(this uint color) => Color.FromArgb((byte)(color >> 24), (byte)(color >> 16), (byte)(color >> 8), (byte)(color >> 0)); /// Gets the name of the color /// The color to get the KnownColor for. /// A new KnownColor structure. public static KnownColor? GetKnownColor(this Color color) { KnownColor @out; if (knownColors.Value.TryGetValue(color.PackColor(), out @out)) return @out; return null; } } 

Если вы хотите получить имя цвета, вы можете сделать это без шага преобразования цвета в hex через:

 Color c = (Color) yourColor; yourColor.Color.Tostring; 

Затем удалите ненужные символы, которые будут возвращены, большую часть времени, если ваш цвет не определен, он вернет значение ARGB, которое в этом случае не будет содержать встроенных имен, но оно содержит много имен.

Кроме того, ColorConverter – хороший способ конвертировать из шестнадцатеричного имени, если вам вообще нужен шестнадцатеричный код.

сделал строку wpf для конвертера цветов, так как мне это нужно:

  class StringColorConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { string colorString = value.ToString(); //Color colorF = (Color)ColorConverter.ConvertFromString(color); //displays r,g ,b values Color colorF = ColorTranslator.FromHtml(colorString); return colorF.Name; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

можно использовать с

   
  • Как сделать точки одним цветом, когда третий столбец равен нулю, а другой цвет - в Gnuplot?
  • Как получить цвет из шестнадцатеричной строки цвета
  • Как применить непрозрачность к цветовой переменной CSS?
  • navbar color в Twitter Загрузочный
  • Алгоритм цветового затухания?
  • Цветной grep - просмотр всего файла с выделенными совпадениями
  • Как преобразовать целое число цвета в шестнадцатеричную строку в Android?
  • Как заполнить geom_polygon разными цветами выше и ниже y = 0?
  • Android: изменение фонового цвета активности (основной вид)
  • Есть ли простой способ сравнить, насколько близки два цвета друг к другу
  • Цветовой индекс Star BV до уровня RGB
  • Давайте будем гением компьютера.