在我的应用程序中,我允许用户构建颜色,然后在以后向他显示颜色的名称或值。如果用户选择红色(全红,不是红色),我想让他看到“红色”。如果他选择一些奇怪的颜色,那么十六进制值就会很好。下面是演示此问题的示例代码:为什么使用Color.FromArgb()创建一个颜色时,Color.IsNamedColor不起作用?
static string GetName(int r, int g, int b)
{
Color c = Color.FromArgb(r, g, b); // Note that specifying a = 255 doesn't make a difference
if (c.IsNamedColor)
{
return c.Name;
}
else
{
// return hex value
}
}
即使有很明显的颜色,如红色IsNamedColor
从未返回true。看看我的颜色和Color.Red
的ARGB值,我没有看到任何区别。但是,调用Color.Red.GetHashCode()
会返回与Color.FromArgb(255, 0, 0).GetHashCode()
不同的哈希码。
如何使用用户指定的RGB值创建颜色并让Name
属性正确显示?