[Silverlight]16进制颜色转ARGB及Color转Int32
发布日期:2021-09-10 04:49:45 浏览次数:2 分类:技术文章

本文共 1468 字,大约阅读时间需要 4 分钟。

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

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

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

双击代码全选
1
2
3
4
5
6
7
8
9
10
11
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)
    };
}

 

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

双击代码全选
1
2
Rectangle rectangle = 
new
 Rectangle();
rectangle.Fill = 
new
 SolidColorBrush(
"#FFF5F5F5"
.ToColor());

 

  自然就没问题了

  Color转Int32

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

双击代码全选
1
2
3
4
5
6
7
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;
}

 

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

双击代码全选
1
2
3
4
5
Rectangle rectangle = 
new
 Rectangle();
SolidColorBrush scb = 
new
 SolidColorBrush();
scb.Color = 
"#FFF5F5F5"
.ToColor();
rectangle.Fill = scb;
MessageBox.Show(scb.Color.ToArgb().ToString());

 

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

  OK,散会:)

转载地址:https://blog.csdn.net/weixin_34375251/article/details/86090766 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:30个真棒的社会化图标集
下一篇:Leaves -- iOS上一种图书翻页效果的实现

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月15日 01时23分30秒