• .NET中颜色的转换方法总结


    1,AGRB字符串"#FF00AFDB"转Color

    法一:System.Drawing.ColorTranslator类

    Color color = ColorTranslator.FromHtml("#FF00AFDB");
    ColorTranslator还可以将Color转成Html的颜色代码,但是Alpha值将会丢失,如"#FF00AFDB"将会变成"#00AFDB"

    法二:System.Drawing.ColorConverter类

    ColorConverter colorConverter = new ColorConverter();
    Color color = (Color)colorConverter.ConvertFromString("#FF00AFDB");
    备注:对于WPF,对应的是System.Windows.Media.ColorConverter,ConvertFromString也变成了静态方法
    Color color = (Color)ColorConverter.ConvertFromString("#FF00AFDB");

    法三:将"#FF00AFDB"转换成int型的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());

    2,已知颜色的名字创建Color,如red,green等

    Color color = Color.FromName("red");

    3,不知道颜色的名字,可以用系统定义的颜色,如下面几种方式


    Color color = Color.FromKnownColor(KnownColor.ActiveBorder);
    Color color = Color.Red;
    Color color = SystemColors.ButtonFace;

    4,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());

  • 相关阅读:
    【C++札记】友元
    【C++札记】const关键字
    【C++札记】实现C++的string类
    【C++札记】拷贝构造函数,浅拷贝和深拷贝
    【C++札记】内联函数
    【C++札记】函数重载
    文章博客导航
    【C++札记】标准输入与输出
    毕业季,学子们又把翟天临推上了热搜!
    【底层原理】高级开发必须懂的"字节对齐"
  • 原文地址:https://www.cnblogs.com/xiashengwang/p/2864858.html
Copyright © 2020-2023  润新知