打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
.[Silverlight]16进制颜色转ARGB及Color转Int32
16进制色字符串转ARGB

  做Web的都喜欢用16进制字符串标识颜色,比如“#F5F5F5”这类的,自然这个到了Silverlight/WPF中就要用ARGB表示:“#FFF5F5F5”(前两位标识Alpha,即透明度)。这在XAML中没有任何问题,可是如果我们想在代码中设置颜色呢,或者是从XML中读取的相关值呢?

  必然会报错嘛,至少我是不知道SL或者WPF有没有公开这个Converter,反正俺是无能为力

  这里提供一个代码片段,帮助我们将16进制字符串转为ARGB色

public static Color ToColor(this string colorName) {
    if (colorName.StartsWith("#"))
        colorName = colorName.Replace("#", string.Empty);
    int v = int.Parse(colorName, System.Globalization.NumberStyles.HexNumber);
    return new Color() {
        A = Convert.ToByte((v >> 24) & 255),
        R = Convert.ToByte((v >> 16) & 255),
        G = Convert.ToByte((v >> 8) & 255),
        B = Convert.ToByte((v >> 0) & 255)
    };
}

 

  这里我做成了扩展方法,之后这样使用

Rectangle rectangle = new Rectangle();
rectangle.Fill = new SolidColorBrush("#FFF5F5F5".ToColor());

 

  自然就没问题了

  Color转Int32

  看到这里你可能要问了,Color转int有啥用啊?其实如果你在用一些现有的图像库的时候,它们经常将Color表现为一个int值。在这种情况下,ARGB值是通过其AARRGGBB的byte的顺序用32位int表现的。这里我们可以做如下转换:

public static int ToArgb(this Color color) {
    int argb = color.A << 24;
    argb += color.R << 16;
    argb += color.G << 8;
    argb += color.B;
    return argb;
}

 

  以下是这两个方法的一个综合应用:

Rectangle rectangle = new Rectangle();
SolidColorBrush scb = new SolidColorBrush();
scb.Color = "#FFF5F5F5".ToColor();
rectangle.Fill = scb;
MessageBox.Show(scb.Color.ToArgb().ToString());

 

  猜猜MessageBox Show出来的值是什么?

  OK,散会:)

  出处:http://024hi.cnblogs.com/

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
自定义颜色下拉框
一步一步学Silverlight 2系列(26):基本图形
七、使用GDI 画扇形
Android绘图机制与处理技巧
[代码全屏查看]
java的各类型数据在内存中分配情况详解_
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服