c# - hexadecimal - tabla de codigo de colores
¿Cómo obtengo el color de un código de color hexadecimal usando.NET? (14)
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.
¿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?
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);
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));
Podrías usar el siguiente código:
Color color = System.Drawing.ColorTranslator.FromHtml("#FFDFD991");
Puede ver los conjuntos Silverlight / WPF elipse con color hexadecimal para usar un valor hexadecimal:
your_contorl.Color = DirectCast(ColorConverter.ConvertFromString("#D8E0A627"), Color)
Si desea hacerlo con una aplicación de la Tienda Windows, siga las instrucciones de @Hans Kesting y @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));
Si no desea utilizar el traductor de color, puede hacerlo fácilmente:
string colorcode = "#FFFFFF00";
int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
Color clr = Color.FromArgb(argb);
El código de color 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)
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.
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");
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") ;
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();
Utilizar
System.Drawing.Color.FromArgb(myHashCode);
WPF:
using System.Windows.Media;
//hex to color
Color color = (Color)ColorConverter.ConvertFromString("#7AFF7A7A");
//color to hex
string hexcolor = color.ToString();
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));
}