none
string 如何转 color RRS feed

答案

  • 你好。

    实现的大致思路是:去掉多余的#号,然后判断是8位(包含alpha)还是6位(不包含alpha),然后每两位字符转换为一个byte类型。

    下面是string 到 Color 的转换示例:

    string colorstr = "#FF4D4D4D";
    string hex = colorstr.ToString().Replace("#", "");
    byte alpha;
    byte pos = 0;
    
    if (hex.Length == 8)
    {
        alpha = System.Convert.ToByte(hex.Substring(pos, 2), 16);
        pos = 2;
    }
    else
    {
        alpha = System.Convert.ToByte("ff", 16);
    }
    
    byte red = System.Convert.ToByte(hex.Substring(pos, 2), 16);
    pos += 2;
    byte green = System.Convert.ToByte(hex.Substring(pos, 2), 16);
    pos += 2;
    byte blue = System.Convert.ToByte(hex.Substring(pos, 2), 16);
    
    Color color = Color.FromArgb(alpha, red, green, blue);


    2014年7月17日 7:29
    版主
  • ?????
    2014年7月17日 9:00

全部回复

  • 你好。

    实现的大致思路是:去掉多余的#号,然后判断是8位(包含alpha)还是6位(不包含alpha),然后每两位字符转换为一个byte类型。

    下面是string 到 Color 的转换示例:

    string colorstr = "#FF4D4D4D";
    string hex = colorstr.ToString().Replace("#", "");
    byte alpha;
    byte pos = 0;
    
    if (hex.Length == 8)
    {
        alpha = System.Convert.ToByte(hex.Substring(pos, 2), 16);
        pos = 2;
    }
    else
    {
        alpha = System.Convert.ToByte("ff", 16);
    }
    
    byte red = System.Convert.ToByte(hex.Substring(pos, 2), 16);
    pos += 2;
    byte green = System.Convert.ToByte(hex.Substring(pos, 2), 16);
    pos += 2;
    byte blue = System.Convert.ToByte(hex.Substring(pos, 2), 16);
    
    Color color = Color.FromArgb(alpha, red, green, blue);


    2014年7月17日 7:29
    版主
  • 非常感谢你的回答,我也想到了这个做法,但是一直没有实现。

    看来windows应用商店开发与C#有很大区别呢,我还在一直纠结找到类似Color.FromName这样的方法呢。。。

    看来我←了。

    谢谢你的回答 哦 !

    2014年7月17日 8:28
  • 不客气。

    你可以把它封装为一个公用的方法来使用。

    商店应用可以使用Windows.UI.Colors 类来取得已知的颜色,如Red,Gray等等。

    另外可以取得很多系统画刷,参考这里:XAML theme resources reference

    2014年7月17日 8:43
    版主
  • ?????
    2014年7月17日 9:00
  • 恩,好的

    我已经封装了这个方法

    非常感谢o !

    2014年7月17日 9:52
  • 非常感谢你的回答!

    2014年7月17日 10:14