it-swarm.com.de

Wie erhalte ich die Farbe aus einem hexadezimalen Farbcode mit .NET?

Wie kann ich eine Farbe aus einem hexadezimalen Farbcode erhalten (z. B. #FFDFD991)?

Ich lese eine Datei und erhalte einen hexadezimalen Farbcode. Ich muss die entsprechende System.Windows.Media.Color -Instanz für den hexadezimalen Farbcode erstellen. Gibt es eine eingebaute Methode im Framework, um dies zu tun?

555
viky

Ich nehme an, das ist ein ARGB-Code ... Beziehen Sie sich auf System.Drawing.Color oder System.Windows.Media.Color? Letzteres wird beispielsweise in WPF verwendet. Ich habe noch niemanden gesehen, der es erwähnt hat. Für den Fall, dass Sie danach gesucht haben:

using System.Windows.Media;

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

Angenommen, Sie meinen den HTML-Typ RGB-Code (Hex-Code, z. B. # FFCC66), verwenden Sie die Klasse ColorTranslator :

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

Wenn Sie jedoch einen ARGB-Hex-Code verwenden, können Sie die Klasse ColorConverter aus dem System.Windows.Media-Namespace verwenden:

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

Wenn Sie den ColorTranslator nicht verwenden möchten, können Sie dies auf einfache Weise tun:

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

Der Farbcode ist nur die hexadezimale Darstellung des ARGB-Werts.

EDIT

Wenn Sie 4 Werte anstelle einer einzelnen Ganzzahl verwenden müssen, können Sie dies verwenden (indem Sie mehrere Kommentare kombinieren):

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

Hinweis 1: NumberStyles befindet sich in System.Globalization.
Hinweis 2: Bitte geben Sie Ihre eigene Fehlerprüfung an (der Farbcode sollte ein Hexadezimalwert mit 6 oder 8 Zeichen sein).

104
Hans Kesting

Es gibt auch diese nette kleine Erweiterungsmethode:

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

In Benutzung:

Color color = 0xFFDFD991.ToColor();
39
Jink

Die drei folgenden Varianten ergeben genau die gleiche Farbe. Der letzte hat den Vorteil, dass er in Visual Studio 2010 IDE (vielleicht ist es ReSharper, der das macht) mit der richtigen Farbe hervorgehoben wird.

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

Sie könnten den folgenden Code verwenden:

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

Ich musste einen HEX-Farbcode in eine System.Drawing.Color konvertieren, insbesondere eine Nuance von Alice Blue als Hintergrund in einem WPF-Formular, und stellte fest, dass die Suche nach der Antwort länger dauerte als erwartet:

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

Wenn Sie dies mit einer Windows Store-App tun möchten, antworten Sie mit @Hans Kesting und @Jink:

    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

Dieser Beitrag ist zum Goto für alle geworden, die versuchen, einen Hex-Farbcode in eine Systemfarbe umzuwandeln. Daher habe ich mir überlegt, eine umfassende Lösung hinzuzufügen, die sich sowohl mit 6-stelligen (RGB) als auch mit 8-stelligen (ARGB) Hex-Werten befasst.

Laut Microsoft standardmäßig beim Konvertieren von einem RGB-Wert in einen ARGB-Wert

Der Alpha-Wert ist implizit 255 (vollständig undurchsichtig).

Dies bedeutet, dass durch Hinzufügen von FF zu einem 6-stelligen (RGB) Hex-Farbcode ein 8-stelliger ARGB-Hex-Farbcode entsteht. Daher kann eine einfache Methode erstellt werden, die sowohl ARGB- als auch RGB-Hex-Werte verarbeitet und in die entsprechende Farbstruktur konvertiert.

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

    }

Dies wurde durch die Antwort von Hans Kesting inspiriert.

3
Justin

Sie können sehen Silverlight/WPF setzt Ellipse mit hexadezimaler Farbe für die Verwendung eines Hexadezimalwerts:

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

Verwenden

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

Wenn Sie HashCode wie in .GetHashCode() meinen, können Sie leider nicht zurück. Hash-Funktionen sind nicht bidirektional, Sie können nur vorwärts und nicht rückwärts gehen.

Befolgen Sie den Vorschlag von Oded, wenn Sie die Farbe basierend auf dem Hexadezimalwert der Farbe erhalten möchten.

0

Das grundlegendste ist einfach:

Color.ParseColor("#ff43a047")
0
aronccs