c# tabla - ¿Cómo obtengo el color de un código de color hexadecimal usando.NET?




codigo colores (13)

Las tres variantes siguientes dan exactamente el mismo color. El último tiene la ventaja de estar resaltado en el IDE de Visual Studio 2010 (quizás sea ReSharper lo que 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);

¿Cómo puedo obtener un color de un código de color hexadecimal (por ejemplo, #FFDFD991 )?

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


Suponiendo que te refieres a los códigos RGB de tipo HTML (llamados códigos hexadecimales, como # FFCC66), usa la clase ColorTranslator :

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

Si, sin embargo, está utilizando un código hexadecimal ARGB, puede usar la clase ColorConverter del espacio de nombres System.Windows.Media:

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

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

Supongo que es un código ARGB ... ¿Te refieres a System.Drawing.Color o System.Windows.Media.Color ? Este último se utiliza en WPF, por ejemplo. No he visto a nadie mencionarlo todavía, por si acaso lo buscabas:

using System.Windows.Media;

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

También existe este método de extensión poco ordenado:

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

Esta publicación se ha convertido en el goto para cualquiera que intente convertir un código de color hexadecimal a un color de sistema. Por lo tanto, pensé que agregaría una solución integral que trate 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 los hexes ARGB y RGB y los convierta a la estructura de color adecuada.

    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.


Podrías usar el siguiente código:

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

Utilizar

System.Drawing.Color.FromArgb(myHashCode);

Necesitaba convertir un código de color HEX en un System.Drawing.Color, específicamente un tono de Alice Blue como fondo en un formulario WPF y descubrí que me llevó más tiempo de lo esperado 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));


WPF:

using System.Windows.Media;

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

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

Si te refieres a HashCode como en .GetHashCode() , me temo que no puedes volver. Las funciones de hash no son bidireccionales, solo puede avanzar, no retroceder.

Siga la sugerencia de Oded si necesita obtener el color basado en el valor hexadecimal del color.


Igual que la respuesta de John, pero con un método de extensión un poco menos detallado.

public static string GetDirectoryPath(this Assembly assembly)
{
    string filePath = new Uri(assembly.CodeBase).LocalPath;
    return Path.GetDirectoryName(filePath);            
}

Ahora puedes hacer:

var localDir = Assembly.GetExecutingAssembly().GetDirectoryPath();

o si prefieres:

var localDir = typeof(DaoTests).Assembly.GetDirectoryPath();




c# wpf colors hex