扩展方法或子类创建一个基于另一种颜色和alpha的System.Drawing.Color?

时间:2013-04-04 19:40:13

标签: c# extension-methods system.drawing.color

我想使用以下一种习语在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);

我仍然更喜欢扩展方法,在我看来很快我们的公司将受益于类似this question中描述的方法,所以我想知道它们会是什么样的(假设Color是结构,而不是类。)

1 个答案:

答案 0 :(得分:2)

这样的事情怎么样:

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);

进一步阅读