Question Comment 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 ex. #FFDFD991)?

Je lis un fichier et je reçois un code de couleur hexadécimal. J'ai besoin de créer le correspondant System.Windows.Media.Color instance pour le code de couleur hexadécimal. Existe-t-il une méthode intégrée dans le cadre pour le faire?


502
2018-01-21 14:07


origine


Réponses:


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 le mentionner, donc au cas où vous le cherchiez:

using System.Windows.Media;

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

639
2018-01-21 14:32



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

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

Si, toutefois, vous utilisez un code hexadécimal ARGB, vous pouvez utiliser ColorConverter class à partir de l'espace de noms System.Windows.Media:

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

472
2018-01-21 14:10



Si vous ne voulez 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 de couleur est juste la représentation hexadécimale de la valeur ARGB.

MODIFIER

Si vous avez besoin d'utiliser 4 valeurs au lieu d'un seul entier, vous pouvez l'utiliser (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 (le code de couleur doit être une valeur hexadécimale de 6 ou 8 caractères)


88
2018-01-21 14:28



Il y a aussi cette 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();

36
2018-04-27 06:58



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

var cc1 = System.Drawing.ColorTranslator.FromHtml("#479DEE");

var cc2 = System.Drawing.Color.FromArgb(0x479DEE);

var cc3 = System.Drawing.Color.FromArgb(0x47, 0x9D, 0xEE);

33
2018-04-30 10:13



    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
2018-06-13 20:32



Vous pouvez utiliser le code suivant:

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

11
2017-11-09 08:15