web-dev-qa-db-fra.com

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. J'ai besoin de 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 le faire?

555
viky

Je suppose que c'est un code ARVB ... 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 le mentionner, donc juste au cas où vous le cherchiez:

using System.Windows.Media;

Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");
693
Thorarin

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

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

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

Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color;
//or      = (Color) ColorConverter.ConvertFromString("#FFCC66") ;
518
Oded

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

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

Le code couleur est simplement la représentation hexadécimale de la valeur ARGB.

EDIT

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

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

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

104
Hans Kesting

Il y a aussi cette jolie petite méthode d'extension:

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();
39
Jink

Les trois variantes ci-dessous donnent exactement la même couleur. Le dernier a l'avantage d'être mis en surbrillance dans Visual Studio 2010 IDE (c'est peut-être ReSharper qui le fait) avec la 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);
36
demp
    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));
    }
14
Baddack

Vous pouvez utiliser le code suivant:

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

J'avais besoin de convertir un code de couleur HEX en System.Drawing.Color, en particulier une nuance d'Alice Blue en tant qu'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));
11
ConfusedDeer

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

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

Cet article est devenu la référence pour ceux qui essaient de convertir un code de couleur hexadécimal en une couleur système. Par conséquent, j'ai pensé ajouter une solution complète prenant en charge les valeurs hexadécimales à 6 chiffres (RGB) et à 8 chiffres (ARGB).

Par défaut, selon Microsoft, lors de la conversion d’une valeur RVB en valeur ARGB

La valeur alpha est implicitement 255 (totalement opaque).

Cela signifie qu'en ajoutant FF à un code de couleur hexagonal à 6 chiffres (RVB), celui-ci devient un code de couleur hexadécimal ARVB. Par conséquent, une méthode simple peut être créée pour gérer à la fois les hexagones ARVB et RVB et les convertir en structure color appropriée.

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

    }

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

3
Justin

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

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

Utilisation

System.Drawing.Color.FromArgb(myHashCode);
1
herzmeister

WPF:

using System.Windows.Media;

//hex to color
Color color = (Color)ColorConverter.ConvertFromString("#7AFF7A7A");

//color to hex
string hexcolor = color.ToString();
0
DevXP

Si vous parlez de 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 pouvez aller en avant, pas en arrière.

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

0
Wim Hollebrandse

Le plus fondamental est simplement:

Color.ParseColor("#ff43a047")
0
aronccs