从System.Windows.Media.Color中提取颜色名称

时间:2014-06-28 16:12:57

标签: wpf

如何从System.windows.Media.Color对象中提取颜色的名称(例如"绿色")? .tostring-method给出了十六进制格式#ff008000。

4 个答案:

答案 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