如何从System.windows.Media.Color对象中提取颜色的名称(例如"绿色")? .tostring-method给出了十六进制格式#ff008000。
答案 0 :(得分:4)
您可以使用反射来获取颜色名称:
static string GetColorName(Color col)
{
PropertyInfo colorProperty = typeof(Colors).GetProperties()
.FirstOrDefault(p => Color.AreClose((Color)p.GetValue(null), col));
return colorProperty != null ? colorProperty.Name : "unnamed color";
}
以下代码显示了如何使用GetColorName()
:
Color col = new Color { R = 255, G = 255, B = 0, A = 255 };
MessageBox.Show(GetColorName(col)); // displays "Yellow"
请注意,上面的GetColorName()
方法不是很快,因为它使用反射。如果您打算多次调用GetColorName()
,您可能应该将颜色表缓存在字典中。
答案 1 :(得分:0)
在WPF中,十六进制代码就像rgba一样。
#ff008000
将是
rgba(255, 0, 80, 0); // last 2 00s are for alpha filter.
如果那就是结果。您应该使用switch语句将其转换为某个String值。此外,.ToString()
方法不生成类似Green
的人类可读字符串结果。它只是将结果转换为String,同时将值传递给需要String参数的方法和函数。
以下代码可以帮到您:
var converter = new System.Windows.Media.BrushConverter();
var brush = (Brush) converter.ConvertFromString("#ff008000");
立即使用brush
。
答案 2 :(得分:0)
我的Visual Basic翻译是这样的:
Function GetColorName(ByVal col As System.Windows.Media.Color) As String
Dim coltype As System.Type = GetType(System.Windows.Media.Colors)
Dim colproplist() As PropertyInfo = coltype.GetProperties
Try
Dim colorproperty As PropertyInfo = colproplist.FirstOrDefault(Function(p As PropertyInfo) Color.AreClose(p.GetValue(col, Nothing), col))
Return colorproperty.Name
Catch ex As Exception
Return ("unnamed color")
End Try
End Function
当使用未命名的颜色执行此函数时,我必须捕获空引用异常。为什么,我不知道。
答案 3 :(得分:0)
如果定义了,这将返回英文颜色名称:
Function GetName(color As Media.Color) As String
Dim c = System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B)
Return System.Drawing.ColorTranslator.ToHtml(c)
End Function