Примечание: Хотя это решение и выдает правильное значение цвета HTML, это значение необязательно должно быть шестнадцатеричной строкой RGB, как описано ниже. Это также значительно медленнее, чем мое другое решение.
Третье решение будет использовать класс ColorTranslator
, который работает, потому что:
Метод ColorTranslator.FromHtml()
использует ColorConverter.ConvertFrom
для внутреннего использования (который может анализировать шестнадцатеричные значения ARGB).
Затем ColorTranslator.ToHtml
просто игнорирует альфа-значениеи использует только значения RGB для генерации строки 1 .
Пример:
Color c = ColorTranslator.FromHtml("#FFFF0000");
string rgb = ColorTranslator.ToHtml(c);
А вот некоторый тестовый код дляпокажите, что это решение будет работать со всеми возможными шестнадцатеричными значениями ARGB:
try
{
// Incrementing by 5 to save time. We can use `++` to cover all possible values
// but it will take a long time to execute.
for (int a = 0; a <= 255; a += 5)
for (int r = 0; r <= 255; r += 5)
for (int g = 0; g <= 255; g += 5)
for (int b = 0; b <= 255; b += 5)
ColorTranslator.FromHtml($"#{a.ToString("X2")}{r.ToString("X2")}" +
$"{g.ToString("X2")}{b.ToString("X2")}");
Console.WriteLine("All is good!");
}
catch (FormatException ex)
{
Console.WriteLine($"Failed. Message='{ex.Message}'");
}
1 Однако имейте в виду, что ColorTranslator.ToHtml()
не обязательновернуть шестнадцатеричную строку RGB. Он пытается вернуть имя цвета, если у цвета есть известное имя цвета (которое работает для HTML), в противном случае он прибегает к шестнадцатеричным значениям RGB в формате #RRGGBB
.