Comment puis-je obtenir la couleur d’un code de couleur hexadécimal en utilisant .NET?

Comment puis-je obtenir une couleur à partir d’un code de couleur hexadécimal (par exemple, #FFDFD991 )?

Je lis un fichier et je reçois un code de couleur hexadécimal. Je dois créer l’instance System.Windows.Media.Color correspondante pour le code de couleur hexadécimal. Existe-t-il une méthode intégrée dans le cadre pour y parvenir?

Je suppose que c’est un code ARGB … Faites-vous référence à System.Drawing.Color ou System.Windows.Media.Color ? Ce dernier est utilisé dans WPF par exemple. Je n’ai encore vu personne en parler, alors juste au cas où vous le chercheriez:

 using System.Windows.Media; Color color = (Color)ColorConverter.ConvertFromSsortingng("#FFDFD991"); 

En supposant que vous voulez dire les codes RGB de type HTML (appelés codes Hex, tels que # FFCC66), utilisez la classe ColorTranslator :

 System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FFCC66"); 

Si, toutefois, vous utilisez un code hexadécimal ARGB, vous pouvez utiliser la classe ColorConverter de l’espace de noms System.Windows.Media:

 Color col = ColorConverter.ConvertFromSsortingng("#FFDFD991") as Color; //or = (Color) ColorConverter.ConvertFromSsortingng("#FFCC66") ; 

Si vous ne souhaitez pas utiliser ColorTranslator, vous pouvez le faire facilement:

 ssortingng colorcode = "#FFFFFF00"; int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber); Color clr = Color.FromArgb(argb); 

Le colorcode est juste la représentation hexadécimale de la valeur ARGB.

MODIFIER

Si vous devez utiliser 4 valeurs au lieu d’un seul entier, vous pouvez l’utiliser (en combinant plusieurs commentaires):

 ssortingng 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.Subssortingng(0,2), NumberStyles.HexNumber), int.Parse(colorcode.Subssortingng(2,2), NumberStyles.HexNumber), int.Parse(colorcode.Subssortingng(4,2), NumberStyles.HexNumber)); else // assuming length of 8 col = Color.FromArgb( int.Parse(colorcode.Subssortingng(0, 2), NumberStyles.HexNumber), int.Parse(colorcode.Subssortingng(2, 2), NumberStyles.HexNumber), int.Parse(colorcode.Subssortingng(4, 2), NumberStyles.HexNumber), int.Parse(colorcode.Subssortingng(6, 2), NumberStyles.HexNumber)); 

Remarque 1 : NumberStyles est dans System.Globalization.
Note 2 : veuillez fournir votre propre vérification d’erreur (le code couleur doit avoir une valeur hexadécimale de 6 ou 8 caractères)

Il y a aussi cette petite méthode d’extension intéressante:

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

Utilisé:

 Color color = 0xFFDFD991.ToColor(); 

Les trois variantes ci-dessous donnent exactement la même couleur. Le dernier a l’avantage d’être mis en évidence dans Visual Studio 2010 IDE (peut-être que c’est ReSharper qui le fait) avec une couleur appropriée.

 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(ssortingng hex) { if (hex.StartsWith("#")) hex = hex.Subssortingng(1); if (hex.Length != 6) throw new Exception("Color not valid"); return Color.FromArgb( int.Parse(hex.Subssortingng(0, 2), System.Globalization.NumberStyles.HexNumber), int.Parse(hex.Subssortingng(2, 2), System.Globalization.NumberStyles.HexNumber), int.Parse(hex.Subssortingng(4, 2), System.Globalization.NumberStyles.HexNumber)); } 

Vous pouvez utiliser le code suivant:

 Color color = System.Drawing.ColorTranslator.FromHtml("#FFDFD991"); 

Je devais convertir une nuance d’Alice Blue en arrière-plan sur un formulaire WPF et j’ai trouvé qu’il fallait plus de temps que prévu pour trouver la réponse:

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

Si vous voulez le faire avec une application Windows Store, à la suite de @Hans Kesting et @Jink répondent:

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

Cet article est devenu le bon moyen pour quiconque essaie de convertir un code couleur hexadécimal en une couleur système. Par conséquent, je pensais append une solution complète qui traite à la fois les valeurs hexadécimales à 6 chiffres (RVB) et à 8 chiffres (ARGB).

Par défaut, selon Microsoft, lors de la conversion d’une valeur RVB à une valeur ARVB

La valeur alpha est implicitement 255 (complètement opaque).

Cela signifie qu’en ajoutant FF à un code de couleur hexadécimal (RVB) à 6 chiffres, il devient un code de couleur hexadécimal ARGB à 8 chiffres. Par conséquent, une méthode simple peut être créée pour gérer à la fois les hexagones ARGB et RVB et les convertir en la structure Color appropriée.

  public static System.Drawing.Color GetColorFromHexValue(ssortingng hex) { ssortingng 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)"); } 

Cela a été inspiré par la réponse de Hans Kesting.

Vous pouvez voir que Silverlight / WPF définit l’ellipse avec une couleur hexadécimale pour utiliser une valeur hexadécimale:

 your_contorl.Color = DirectCast(ColorConverter.ConvertFromSsortingng("#D8E0A627"), Color) 

Utilisation

 System.Drawing.Color.FromArgb(myHashCode); 

WPF:

 using System.Windows.Media; //hex to color Color color = (Color)ColorConverter.ConvertFromSsortingng("#7AFF7A7A"); //color to hex ssortingng hexcolor = color.ToSsortingng(); 

Si vous voulez dire HashCode comme dans .GetHashCode() , j’ai bien peur que vous ne puissiez pas revenir en arrière. Les fonctions de hachage ne sont pas bidirectionnelles, vous ne pouvez que «avancer», pas revenir.

Suivez la suggestion de Oded si vous devez obtenir la couleur en fonction de la valeur hexadécimale de la couleur.