Start Debugging
2012-01-21 Actualizado 2023-11-05 csharp Edit on GitHub

C#: convertir Hex a Color

Un método de extensión en C# que convierte códigos de color en hex (formatos RGB y ARGB) a objetos Color.

Abajo tienes un método de extensión que puede ayudarte a convertir cualquier código de color en hex a un objeto Color.

public static Color ToColor(this string hexColor)
{
   return Color.FromArgb(
      Convert.ToByte(hexColor.ToString().Substring(1, 2), 16),
      Convert.ToByte(hexColor.ToString().Substring(3, 2), 16),
      Convert.ToByte(hexColor.ToString().Substring(5, 2), 16),
      Convert.ToByte(hexColor.ToString().Substring(7, 2), 16));
}

El método anterior solo puede convertir códigos ARGB de 8 caracteres. Para convertir también códigos RGB simples, comprobaremos la longitud del string (9 = ARGB y 7 = RGB) y, si es 7, añadiremos el alpha al string como FF (255, opaco) y solo entonces devolveremos el color.

public static Color ToColor(this string hexColor)
{
   string tempHexColor = string.Empty;
   if (hexColor.Length == 7)
      tempHexColor = "#FF" + hexColor.Substring(1,6);
   return Color.FromArgb(
      Convert.ToByte(tempHexColor.Substring(1, 2), 16),
      Convert.ToByte(tempHexColor.Substring(3, 2), 16),
      Convert.ToByte(tempHexColor.Substring(5, 2), 16),
      Convert.ToByte(tempHexColor.Substring(7, 2), 16));
}

También deberíamos hacer algo por si el código de color hex no es realmente un código de color hex válido. Añade otra sentencia if después de la que ya añadimos y comprueba de nuevo la longitud del string; si no es 9, no sirve, así que puedes devolver el color que quieras (yo devolveré transparente). El método final queda así:

public static Color ToColor(this string hexColor)
{
   string tempHexColor = string.Empty;
   if (hexColor.Length == 7)
      tempHexColor = "#FF" + hexColor.Substring(1,6);
   else
      tempHexColor = hexColor;
   if (tempHexColor.Length != 9)
      tempHexColor = "#00000000";
   return Color.FromArgb(
      Convert.ToByte(tempHexColor.Substring(1, 2), 16),
      Convert.ToByte(tempHexColor.Substring(3, 2), 16),
      Convert.ToByte(tempHexColor.Substring(5, 2), 16),
      Convert.ToByte(tempHexColor.Substring(7, 2), 16));
}

Cómo usarlo:

string myHexString = "#78196DFD";
Color myColor = new Color();
myColor = myHexString.ToColor();

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Volver