convertire il codice esadecimale in nome colore

Come posso convertire questo hexa code = #2088C1 nel nome del colore Come blu o rosso

Il mio objective è quello di ottenere il nome del colore come “blu” per il codice hexa dato

Ho provato il codice qui sotto ma non stava dando alcun nome di colore ..

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

ma non dà il nome del colore come questo “aquablue”

Sto usando le applicazioni winforms con c #

Mi sono imbattuto in un sito tedesco che fa esattamente quello che vuoi:

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

Per ottenere il nome del colore puoi usarlo come segue per ottenere il KnownColor :

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

Tuttavia, System.Color.GetKnownColor sembra essere rimosso nelle versioni più recenti di .NET

Usa questo metodo

 Color myColor = ColorTranslator.FromHtml(htmlColor); 

Vedi anche il link

Questo può essere fatto con un po ‘di riflessione. Non ottimizzato, ma funziona:

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

Mi sono appena inventato questo:

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

Non esiste una funzione pronta per questo. Dovrai scorrere l’elenco dei colors noti e confrontare l’RGB di ciascun colore conosciuto con l’RGB dello sconosciuto.

Dai un’occhiata a questo link: http://bytes.com/topic/visual-basic-net/answers/365789-argb-color-know-color-name

Se si ha accesso agli assembly SharePoint, Microsoft.SharePoint contiene una class Microsoft.SharePoint.Utilities.ThemeColor con un metodo statico GetScreenNameForColor che accetta un object System.Drawing.Color e restituisce una string che lo descrive. Ci sono circa 20 nomi di colors diversi con variazioni chiare e scure che può restituire.

Questo è un vecchio post, ma ecco un convertitore Color to KnownColor ottimizzato, poiché .NET ToKnownColor () integrato non funziona correttamente con le strutture adhoc Color. La prima volta che chiami questo codice, caricherai pigro i valori di colore conosciuti e subirai un colpo minore. Le chiamate sequenziali alla funzione sono una semplice ricerca del dizionario e veloce.

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

Se stai cercando di ottenere il nome del colore, puoi farlo senza la fase di convertire il colore in esadecimale tramite:

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

Quindi rimuovi i simboli indesiderati che vengono restituiti, il più delle volte se il tuo colore non è definito restituirà un valore ARGB che in questo caso non contiene nomi incorporati, ma include molti valori di nome.

Inoltre, ColorConverter è un buon modo per convertire da esadecimale a nome se è necessario avere il codice esadecimale.

ha creato una stringa wpf per il convertitore di colore poiché ne avevo bisogno 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(); } } 

utilizzabile con