Метод расширения или подкласс для создания 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);
Я все еще предпочел бы подход "Метод расширения", и мне кажется, что скоро наша компания выиграет от методов, подобных тем, которые описаны в этом вопросе, поэтому мне интересно, как они будут выглядеть (учитывая, что Color является структурой, а не классом).
1 ответ
Решение
Как насчет чего-то вроде этого:
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
class) указывает компилятору, что это метод расширения.
Color transparentblue = Color.Blue.WithAlpha(0.5);
Дальнейшее чтение