基于另一种颜色和alpha来创建System.Drawing.Color的扩展方法或子类
本文关键字:Color Drawing 扩展 方法 子类 System 创建 另一种 颜色 alpha | 更新日期: 2023-09-27 18:07:22
我想在c#(而不是XAML)中使用以下习惯用法之一创建颜色:
Color transparentblue = TransparentColor(Brushes.Blue, 0.5); // 0.5 => 128
Color transparentblue = Brushes.Blue.SetAlpha(0.5); // again, 0.5 => 128
我想摆脱Color.FromArgb()
语法,它根本不是设计师友好的。我还让它与静态类中的静态方法一起工作,但写作有点重:
public static class ColorGenerators {
public static Color GetTransparentColor (Color color, double opacity) {
byte op = (byte)(opacity*255);
return Color.FromArgb(op, color.R, color.G, color.B);
}
}
// To be used as
var transparentblue = ColorGenerators.GetTransparentColor(Color.Blue, 0.5);
我仍然更喜欢扩展方法方法,而且在我看来,我们的公司很快就会从类似于这个问题中描述的方法中受益,所以我想知道它们看起来会是什么样子(考虑到Color是一个结构体,而不是一个类)。
这样如何:
public static class ColorExtensions
{
public static Color WithAlpha(this Color color, double opacity)
{
byte op = (byte)(opacity*255);
return Color.FromArgb(op, color.R, color.G, color.B);
}
}
关键字为第一个参数中的this
关键字。这(以及作为static
类中的static
方法)向编译器表明这是一个扩展方法。
Color transparentblue = Color.Blue.WithAlpha(0.5);
进一步阅读
- 扩展方法(c#编程指南)