【发布时间】:2016-08-26 07:17:38
【问题描述】:
我在我的应用程序中使用 Microsoft 认知服务/视觉 API。
Vision API 以字符串形式返回颜色 - 十六进制(不带“#”前缀)或名称。
为了将其转换为可用作面板背景颜色的 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 返回并带有 “灰色” 时,我得到一个异常:
Grey is not a valid value for Int32
(这是我遇到的唯一一个颜色名称但不知道还有没有其他的)
据我了解,这是因为“Grey”不是 HTML 颜色名称,因为它应该是“Gray”(“Grey”是 CSS 名称) http://www.rapidtables.com/web/color/gray-color.htm
处理此异常的最佳方法是什么?我正在考虑创建一个“坏”颜色名称的字典,并手动为这些颜色分配真正的 HTML 颜色名称(或直接为 System.Drawing.Color),但这似乎容易出现人为错误和不断更新颜色的游戏。
想法?谢谢。
【问题讨论】:
-
如您所说,99% 的案例都有效。所以对不好的颜色名称做一些“硬编码”是可以的。 P.S.,Gray 和 Gray 都是正确的,一个是美国人,一个是英国人。
-
谢谢!是的,我认为这将是最简单的解决方案,但不喜欢它会变得多么混乱,哈哈 :) KISS 解决方案! (除非有人可以提供更整洁的选择;))
标签: c# winforms exception colors vision