zoukankan      html  css  js  c++  java
  • [Silverlight]16进制颜色转ARGB及Color转Int32

    做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,散会:)

  • 相关阅读:
    Windows核心编程 第八章 用户方式中线程的同步(下)
    Windows核心编程 第八章 用户方式中线程的同步(下)
    Windows核心编程 第八章 用户方式中线程的同步(上)
    Windows核心编程 第八章 用户方式中线程的同步(上)
    Windows PE 第四章 导入表
    Windows PE 第四章 导入表
    PAT 1005 继续(3n+1)猜想
    PAT 甲级 1002 A+B for Polynomials
    HDU 1798 Tell me the area
    HDU 1159 Common Subsequence
  • 原文地址:https://www.cnblogs.com/qqflying/p/2222521.html
Copyright © 2011-2022 走看看