C#: преобразование Hex в Color
Метод-расширение C#, преобразующий hex-коды цветов (форматы RGB и ARGB) в объекты Color.
Ниже приведён метод-расширение, который поможет преобразовать любой hex-код цвета в объект 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));
}
Метод выше умеет преобразовывать только 8-символьные ARGB-коды. Чтобы конвертировать и обычные RGB-коды, проверим длину строки (9 = ARGB и 7 = RGB) и в случае 7 добавим к строке alpha как FF (255 - непрозрачный) и только потом вернём цвет.
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));
}
Имеет смысл также обработать случай, когда hex-код на самом деле не является корректным hex-кодом цвета. Добавьте ещё один if после уже добавленного и снова проверьте длину строки; если она не равна 9, значение невалидно, и можно вернуть любой цвет (я верну прозрачный). Итоговый метод:
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));
}
Как использовать:
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.