基于另一种颜色和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是一个结构体,而不是一个类)。

基于另一种颜色和alpha来创建System.Drawing.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#编程指南)