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

[b]1,AGRB字符串"#FF00AFDB"转Color[/b]

[b]法一:System.Drawing.ColorTranslator类[/b]
Color color = ColorTranslator.FromHtml("#FF00AFDB");

ColorTranslator还可以将Color转成Html的颜色代码,但是Alpha值将会丢失,如"#FF00AFDB"将会变成"#00AFDB"
[b]
法二:System.Drawing.ColorConverter类[/b]
ColorConverter colorConverter = new ColorConverter();
Color color = (Color)colorConverter.ConvertFromString("#FF00AFDB");

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


[b]法三:将"#FF00AFDB"转换成int型的ARGB数字,再利用构造函数构建[/b]
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());


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

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


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


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


[b]4,Color转Int32[/b]


看到这里你可能要问了,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());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值