Ich verwende die Microsoft Cognitive Services/Vision-API in meiner Anwendung.C# ColorTranslator.FromHtml() löst Ausnahme für "Gray" aus (ist kein gültiger Wert für Int32)
Vision API gibt Farben als Zeichenfolge zurück - entweder HEX (ohne das Präfix "#") oder als Name.
Um dies zu einer System.Drawing.Color zu konvertieren, die ich als Panel Hintergrundfarbe verwenden können, verwende ich den Code unten:
// 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());
}
Das in 99% der Fälle gut, gearbeitet hat wenn jedoch eine der Farben kehrt von Micrsoft Vision-API mit „Gray“, erhalte ich eine Ausnahme:
Grey is not a valid value for Int32
(Dies ist der einzige Farbe, Name, den ich je gesehen habe, aber ich weiß nicht, wenn da werden andere würden)
Von meinem Verständnis wäre dies, weil „Gray“ kein HTML Farbe Name ist, wie es „Gray“ („Grau“ ist der CSS-Name) sollte http://www.rapidtables.com/web/color/gray-color.htm
Was würde der beste Weg, um diese Ausnahme zu behandeln? Ich habe mir überlegt, ein Lexikon für "schlechte" Farbnamen zu erstellen und diesen Farben ihren wahren HTML-Farbnamen (oder eine System.Drawing.Color) direkt zuzuordnen, aber dies scheint anfällig für menschliche Fehler und ein konstantes Spiel der Farbaktualisierung.
Gedanken? Vielen Dank.
Wie Sie erwähnt haben, 99% der Fälle arbeiten. Also ein wenig "hard-code" für schlechte Farbnamen ist in Ordnung. P. S., Grey und Grey sind beide korrekt, einer ist Amerikaner, der andere ist Brite. – kennyzx
Danke! Ja ich dachte, es wäre die einfachste Lösung, aber mochte nicht, wie chaotisch es könnte lol :) KISS-Lösung ist es! (es sei denn, jemand kann eine bessere Option bieten;)) –