如何将"#00E4FF"转换为代码刷?

Yan*_*hof 7 silverlight

我需要将一些颜色(十六进制)转换为Brush.我需要在代码中执行此操作.

我该怎么做 ?

Jor*_*dan 12

//this would be initialized somewhere else, I assume
string hex = "#00E4FF";

//strip out any # if they exist
hex = hex.Replace("#", string.Empty);

byte r = (byte)(Convert.ToUInt32(hex.Substring(0, 2), 16));
byte g = (byte)(Convert.ToUInt32(hex.Substring(2, 2), 16));
byte b = (byte)(Convert.ToUInt32(hex.Substring(4, 2), 16));

SolidColorBrush myBrush = new SolidColorBrush(Color.FromArgb(255, r, g, b));
Run Code Online (Sandbox Code Playgroud)

  • 我完全同意.这就是OP应该编写健壮,可扩展的代码的原因.这只是一个技术问题,而不是一个强大的可扩展解决方案.OP想要知道一个概念,所以这些答案帮助了他.显然,我们可以搜索StackOverflow并找到我们可以改进代码示例并使它们更具可重用性的实例,但是我应该在不知道OP想要什么的情况下构建一些模块有点冒昧.在这种情况下,简单通常是最有效的,否则解决方案会在噪音中丢失. (4认同)

Gon*_*ing 11

增强版(包括所有颜色格式);

我需要其中一个也适用于3位"速记十六进制形式"和MS alpha通道版本(用于Silverlight/WPF),因此想出这个版本来涵盖所有数字颜色格式:

/// <summary>
/// Convert a Hex color string to a Color object
/// </summary>
/// <param name="htmlColor">Color string in #rgb, #argb, #rrggbb or #aarrggbb format</param>
/// <returns>A color object</returns>
public static Color ColorFromString(string htmlColor)
{
    htmlColor = htmlColor.Replace("#", "");
    byte a = 0xff, r = 0, g = 0, b = 0;
    switch (htmlColor.Length)
    {
        case 3:
            r = byte.Parse(htmlColor.Substring(0, 1), System.Globalization.NumberStyles.HexNumber);
            g = byte.Parse(htmlColor.Substring(1, 1), System.Globalization.NumberStyles.HexNumber);
            b = byte.Parse(htmlColor.Substring(2, 1), System.Globalization.NumberStyles.HexNumber);
            break;
        case 4:
            a = byte.Parse(htmlColor.Substring(0, 1), System.Globalization.NumberStyles.HexNumber);
            r = byte.Parse(htmlColor.Substring(1, 1), System.Globalization.NumberStyles.HexNumber);
            g = byte.Parse(htmlColor.Substring(2, 1), System.Globalization.NumberStyles.HexNumber);
            b = byte.Parse(htmlColor.Substring(3, 1), System.Globalization.NumberStyles.HexNumber);
            break;
        case 6:
            r = byte.Parse(htmlColor.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
            g = byte.Parse(htmlColor.Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
            b = byte.Parse(htmlColor.Substring(4, 2), System.Globalization.NumberStyles.HexNumber);
            break;
        case 8:
            a = byte.Parse(htmlColor.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
            r = byte.Parse(htmlColor.Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
            g = byte.Parse(htmlColor.Substring(4, 2), System.Globalization.NumberStyles.HexNumber);
            b = byte.Parse(htmlColor.Substring(6, 2), System.Globalization.NumberStyles.HexNumber);
            break;
    }
    return Color.FromArgb(a, r, g, b);
}
Run Code Online (Sandbox Code Playgroud)

对于画笔,你可以像这样使用它:

return new SolidColorBrush(ColorFromString(colorString));
Run Code Online (Sandbox Code Playgroud)

使用byte.Parse比Convert更有效,不需要强制转换.

更新:修复了案例8的子字符串偏移.