Pregunta ¿Cómo obtengo el color de un código de color hexadecimal con .NET?


¿Cómo puedo obtener un color de un código de color hexadecimal (p. #FFDFD991)?

Estoy leyendo un archivo y obtengo un código de color hexadecimal. Necesito crear el correspondiente System.Windows.Media.Color instancia para el código de color hexadecimal. ¿Hay un método incorporado en el marco para hacer esto?


502
2018-01-21 14:07


origen


Respuestas:


Supongo que es un código ARGB ... ¿Te estás refiriendo a System.Drawing.Color o System.Windows.Media.Color? Este último se usa en WPF, por ejemplo. No he visto a nadie mencionarlo todavía, por si acaso lo estabas buscando:

using System.Windows.Media;

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

639
2018-01-21 14:32



Suponiendo que se refiera a los códigos RGB de tipo HTML (llamados códigos hexadecimales, como # FFCC66), utilice el ColorTranslator clase:

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

Sin embargo, si está usando un código hexadecimal ARGB, puede usar ColorConverter clase desde el espacio de nombres System.Windows.Media:

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

472
2018-01-21 14:10



Si no desea utilizar ColorTranslator, puede hacerlo fácilmente:

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

El colorcode es solo la representación hexadecimal del valor ARGB.

EDITAR

Si necesita usar 4 valores en lugar de un solo entero, puede usar esto (combinando varios comentarios):

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

Nota 1: NumberStyles está en System.Globalization.
Nota 2: proporcione su propia comprobación de errores (el código de color debe ser un valor hexadecimal de 6 u 8 caracteres)


88
2018-01-21 14:28



También hay este pequeño y ordenado método de extensión:

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

En uso:

Color color = 0xFFDFD991.ToColor();

36
2018-04-27 06:58



Las tres variantes a continuación dan exactamente el mismo color. El último tiene el beneficio de ser destacado en el IDE de Visual Studio 2010 (quizás sea ReSharper el que lo está haciendo) con el color adecuado.

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



Puede usar el siguiente código:

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

11
2017-11-09 08:15



Necesitaba convertir un tono de Alice Blue como fondo en un formulario de WPF y descubrí que tardó más de lo esperado en encontrar la respuesta:

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

6
2018-02-01 00:51



Si desea hacerlo con una aplicación de Windows Store, siguiendo por @Hans Kesting y @Jink, responda:

    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
2018-02-21 13:18



Esta publicación se ha convertido en el truco para cualquiera que intente convertir un código de color hexadecimal en un color de sistema. Por lo tanto, pensé que agregaría una solución integral que trata con valores hexadecimales de 6 dígitos (RGB) y 8 dígitos (ARGB).

De forma predeterminada, según Microsoft, al convertir de un valor RGB a ARGB

El valor alfa es implícitamente 255 (totalmente opaco).

Esto significa que al agregar FF a un código de color hexadecimal de 6 dígitos (RGB) se convierte en un código de color hexadecimal ARGB de 8 dígitos. Por lo tanto, se puede crear un método simple que maneje tanto hexadecimales ARGB como RGB y los convierta a la estructura de Color apropiada.

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

    }

Esto fue inspirado por la respuesta de Hans Kesting.


3
2018-02-12 18:32



Puedes ver Silverlight / WPF establece elipse con color hexadecimal para usar un valor hexadecimal:

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

1
2018-04-30 03:49