Jak uzyskać kolor z szesnastkowego kodu kolorów using.NET?

Jak mogę uzyskać kolor z kodu szesnastkowego (np. #FFDFD991)?

Czytam plik i otrzymuję szesnastkowy kod koloru. Muszę utworzyć odpowiednią instancję System.Windows.Media.Color dla kodu koloru szesnastkowego. Czy istnieje wbudowana metoda w ramach, aby to zrobić?

Author: John, 2010-01-21

14 answers

Zakładam, że to kod ARGB... Masz na myśli System.Drawing.Color Czy System.Windows.Media.Color? Ten ostatni jest używany na przykład w WPF. Nie widziałem jeszcze, żeby ktoś o tym wspominał, więc na wszelki wypadek, gdybyś go szukał:

using System.Windows.Media;

Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");
 643
Author: Thorarin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-21 14:32:14

Zakładając, że masz na myśli kody RGB typu HTML (zwane kodami Hex, takimi jak #ffcc66), Użyj klasy ColorTranslator :

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

Jeśli jednak używasz kodu szesnastkowego ARGB, możesz użyć klasy ColorConverter z systemu.Okna.Przestrzeń nazw mediów:

Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color;
//or      = (Color) ColorConverter.ConvertFromString("#FFCC66") ;
 485
Author: Oded,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-20 16:09:36

Jeśli nie chcesz używać Colortranslatora, możesz to zrobić w prosty sposób:

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

Colorcode jest tylko szesnastkową reprezentacją wartości ARGB.

EDIT

Jeśli chcesz użyć 4 wartości zamiast pojedynczej liczby całkowitej, możesz użyć tego (łącząc kilka komentarzy):

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

Uwaga 1 : NumberStyles jest w systemie.Globalizacja.
Uwaga 2 : proszę podać własne sprawdzanie błędów (colorcode powinien być wartością szesnastkową 6 lub 8 znaków)

 90
Author: Hans Kesting,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-17 12:14:18

Istnieje również ta zgrabna metoda małego rozszerzenia:

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

W użyciu:

Color color = 0xFFDFD991.ToColor();
 36
Author: Jink,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-27 06:58:53

Trzy poniższe warianty dają dokładnie ten sam kolor. Ten ostatni ma tę zaletę, że w Visual Studio 2010 IDE (może to ReSharper to robi) zostanie wyróżniony odpowiednim kolorem.

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

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

var cc3 = System.Drawing.Color.FromArgb(0x47, 0x9D, 0xEE);
 34
Author: demp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-21 23:46:16
    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
Author: Baddack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-13 20:32:20

Możesz użyć następującego kodu:

Color color = System.Drawing.ColorTranslator.FromHtml("#FFDFD991");
 11
Author: Pengzhi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-21 23:39:46

Musiałem przekonwertować kod koloru szesnastkowego na System.Rysunek.Kolor, a konkretnie odcień Alice Blue jako tło na formularzu WPF i okazało się, że znalezienie odpowiedzi trwało dłużej niż oczekiwano]}

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));
 7
Author: ConfusedDeer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-03 14:11:11

Jeśli chcesz to zrobić za pomocą aplikacji Windows Store, po @Hans Kesting i @Jink odpowiedź:

    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
Author: Youngjae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-21 23:48:14

Ten post stał się goto dla każdego, kto próbuje przekonwertować kod koloru szesnastkowego na kolor systemowy. Dlatego pomyślałem, że dodam kompleksowe rozwiązanie, które dotyczy zarówno wartości sześciocyfrowych (RGB), jak i ośmiocyfrowych (ARGB).

Domyślnie, zgodnie z Microsoft, podczas konwersji z wartości RGB do ARGB

Wartość alfa jest domyślnie 255 (całkowicie nieprzezroczysta).

Oznacza to, że dodając FF do sześciocyfrowego (RGB) sześciocyfrowego kodu kolorów, staje się on ośmiocyfrowym kolorem sześciocyfrowym ARGB kod. Dlatego można utworzyć prostą metodę, która obsługuje zarówno hex ARGB, jak i RGB i konwertuje je do odpowiedniej struktury kolorów.
    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)");

    }
Zainspirowało to odpowiedź Hansa Kestinga.
 3
Author: Justin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-12 18:32:55

Widzisz Zestawy Silverlight / WPF elipsa w Kolorze szesnastkowym za użycie wartości szesnastkowej:

your_contorl.Color = DirectCast(ColorConverter.ConvertFromString("#D8E0A627"), Color)
 1
Author: Mwaffak Jamal Zakariya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-21 23:45:15

Użyj

System.Drawing.Color.FromArgb(myHashCode);
 1
Author: herzmeister,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-19 16:59:57

WPF:

using System.Windows.Media;

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

//color to hex
string hexcolor = color.ToString();
 0
Author: DevXP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-23 22:01:06

Jeśli masz na myśli HashCode jak w .GetHashCode(), obawiam się, że nie możesz wrócić. Funkcje Hash nie są dwukierunkowe, można iść tylko "do przodu", a nie do tyłu.

Postępuj zgodnie z sugestią Odeda, jeśli chcesz uzyskać kolor w oparciu o wartość szesnastkową koloru.

 0
Author: Wim Hollebrandse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-19 17:02:06