C#: converter Hex para Color
Um extension method em C# que converte códigos de cor em hex (formatos RGB e ARGB) em objetos Color.
Abaixo, um extension method que pode te ajudar a converter qualquer código de cor em hex em um 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));
}
O método acima só consegue converter códigos ARGB de 8 caracteres. Para converter também códigos RGB simples, vamos verificar o tamanho da string (9 = ARGB e 7 = RGB) e, se for 7, adicionar o alpha à string como FF (255 — opaco) e só então retornar a cor.
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));
}
Devemos também tratar o caso em que o código hex não é realmente um código de cor hex válido. Adicione outro if depois do que já incluímos e cheque de novo o tamanho da string; se não for 9, não está ok, então retorne a cor que quiser (vou retornar transparente). O método final fica assim:
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));
}
Como usar:
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.