convertir el código hexadecimal al nombre del color

¿Cómo puedo convertir este hexa code = #2088C1 en un nombre de color como azul o rojo?

Mi objective es que quiera obtener el nombre de color como “azul” para el código hexadecimal dado

He intentado el siguiente código pero no daba ningún nombre de color.

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

pero no da el nombre de color como este “aquablue”

Estoy usando aplicaciones winforms con c #

Me encontré con un sitio alemán que hace exactamente lo que quieres:

 ///  /// 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); } 

Para obtener el nombre del color, puede usarlo de la siguiente manera para obtener el color conocido :

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

Sin embargo, System.Color.GetKnownColor parece ser eliminado en las versiones más nuevas de .NET

Usa este método

 Color myColor = ColorTranslator.FromHtml(htmlColor); 

Ver también el enlace

Esto se puede hacer con un poco de reflexión. No optimizado, pero funciona:

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

Solo se me ocurrió esto:

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

No hay una función lista para esto. Tendrá que recorrer la lista de colores conocidos y comparar el RGB de cada color conocido con el RGB desconocido.

Echa un vistazo a este enlace: http://bytes.com/topic/visual-basic-net/answers/365789-argb-color-know-color-name

Si tiene acceso a conjuntos de SharePoint, Microsoft.SharePoint contiene una clase Microsoft.SharePoint.Utilities.ThemeColor con un método estático GetScreenNameForColor que toma un objeto System.Drawing.Color y devuelve una string que lo describe. Hay alrededor de 20 nombres de colores diferentes con variaciones claras y oscuras que puede devolver.

Esta es una publicación anterior, pero aquí hay un convertidor optimizado de Color a KnownColor, ya que el construido en .NET ToKnownColor () no funciona correctamente con las estructuras adhoc Color. La primera vez que llame a este código, cargará de forma lenta los valores de color conocidos y tomará un golpe de perforación menor. Las llamadas secuenciales a la función son una búsqueda de diccionario simple y rápida.

 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; } } 

Si está buscando obtener el nombre del color, puede hacerlo sin el paso de convertir el color a hexadecimal a través de:

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

A continuación, elimine los símbolos no deseados que se devuelven, la mayoría de las veces, si su color no está definido, devolverá un valor ARGB que en ese caso no tiene nombres incorporados, pero tiene muchos valores de nombre incluidos.

Además, ColorConverter es una buena forma de convertir de hex a nombre si necesitas tener el código hexadecimal.

Hice una cadena wpf para convertir color ya que necesitaba uno:

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

utilizable con