// 看看这样行不行
[STAThread]
public static void Main(string[] args)
{
var argbColor = Color.FromArgb(255, 255, 0, 0);
var colorName = FindColorName(argbColor);
if (string.IsNullOrEmpty(colorName))
Console.WriteLine("未找到");
else
Console.WriteLine(colorName);
Console.ReadKey();
}
private static string FindColorName(Color argbColor)
{
var propertyInfos = typeof (Color).GetProperties(BindingFlags.Public | BindingFlags.Static);
foreach (var propertyInfo in propertyInfos)
{
if (!propertyInfo.CanRead)
continue;
var value = propertyInfo.GetValue(null, null);
if (!(value is Color))
continue;
if (((Color) value).ToArgb() == argbColor.ToArgb())
return propertyInfo.Name;
}
return null;
}
Color.Name只能为已知颜色,并不能表示所有的颜色,所以你只能自己构造一个对比的方法
没有什么好的办法获取yellow这个字符串,因为system.drawing.color是个结构体,没法FOREACH循环。
建议楼主建立一个hashtable存储“颜色名”,“rgb数值”.之后对RGB值进行foreach匹配。