Я использую Microsoft Cognitive Services/Vision API в своем приложении.C# ColorTranslator.FromHtml() throws Исключение для «Серый» (неверное значение для int32)
API Vision API возвращает цвета как строку - либо HEX (без префикса «#»), либо как имя.
Для того, чтобы превратить это в System.Drawing.Color, что я могу использовать в качестве панели цвет фона, я использую следующий код:
// Hex Color Format
Regex hex = new Regex("^#(?:[0-9a-fA-F]{3}){1,2}$");
// Colours
System.Drawing.Color accent = new System.Drawing.Color();
System.Drawing.Color fore = new System.Drawing.Color();
System.Drawing.Color back = new System.Drawing.Color();
try
{
if (hex.IsMatch("#" + result.Color.AccentColor.ToString())) accent = ColorTranslator.FromHtml("#" + result.Color.AccentColor.ToString());
else accent = ColorTranslator.FromHtml(result.Color.AccentColor.ToString());
fore = ColorTranslator.FromHtml(result.Color.DominantColorForeground.ToString());
back = ColorTranslator.FromHtml(result.Color.DominantColorBackground.ToString());
displayData.Colors = new System.Drawing.Color[] { accent, fore, back };
}
catch (Exception e)
{
throw new Exception(e.Message.ToString());
}
Это прекрасно работали в 99% случаев, однако, когда один из цветов возвращается из Micrsoft Vision, API с «Gray», я получаю исключение:
Grey is not a valid value for Int32
(Это единственное имя, цвет я сталкивался, но я не знаю, если здесь бы другие)
От моего понимания, это будет, потому что «серый» не HTML Имя цвета, как это должно быть «Серый» («Серый» быть имя CSS) http://www.rapidtables.com/web/color/gray-color.htm
Что бы быть лучшим способом справиться с этим Исключением? Я думал о создании словаря «плохих» имен цветов и вручную назначил этим цветам их истинное имя цвета HTML (или непосредственно System.Drawing.Color), но это, похоже, подвержено человеческой ошибке и постоянной игре обновления Color.
Мысли? Благодарю.
Как уже упоминалось, 99% случаев работают. Так что сделайте небольшой «жесткий код» для плохих имен цветов в порядке. P.S., Gray and Grey _both correct_, один - американский, другой - британский. – kennyzx
Спасибо! Да, я думал, что это будет самое простое решение, но не понравилось, как бесполезно это получить LOL :) Решение KISS это! (если кто-то не может предоставить опцию опрятного;)) –