如何在C#中更改颜色的透明度

25

我正在使用SSRS报告查看器来使用对象生成报告。在我的程序中,我要求用户输入一串常见的颜色字符串,例如"红色""蓝色"等。然后,我想生成这种颜色的三个阴影,并使用这种颜色填充报表中的区域图。我通过改变颜色的透明度(alpha)来实现。

这是将字符串转换为颜色的代码:

 newitem.ChartColor = "red";
 Color mycolor = Color.FromName(newitem.ChartColor);

然而,现在我想生成两种与红色相同阴影但不同 alpha(透明度)的颜色,使它们看起来更浅,例如 #56FF0000

我尝试将值传递给 Color 的 A 属性,但是它是只读的。

任何帮助都将不胜感激。

4个回答

35

有一个方法可以完全满足您的需求: Color.FromArgb(int alpha, Color baseColor)

alpha 的有效取值范围为0到255。255代表最不透明的颜色,而0则代表完全透明的颜色。

使用示例:

Color newColor = Color.FromArgb(newAlpha, mycolor);

7

我认为需要在这些回答中包含alpha值表示颜色透明度的信息,0表示最透明,255表示最不透明。以下是一个总结:

                     A L P H A    V A L U E
0 [<--- most transparent]  ... ... ... [most opaque --->] 255

点赞。我将其添加到我的原始答案中,以便更好地展示。 - Ma3x
感激不尽。 :) - Jazimov

7
您可以使用此函数进行设置。
    static Color SetTransparency(int A, Color color)
    {
        return Color.FromArgb(A, color.R, color.G, color.B);
    }

2
我认为“SetTransparency”不是一个清晰的名称。它不会改变现有颜色的属性,而是创建并返回一个新的颜色。 - StayOnTarget

2
我创建了一个方便的扩展方法。
public static class ColorExtensions
{
    ...
    public static Color WithA(this Color color, int newA) => Color.FromArgb(newA,color);
}

使用方法:

newitem.ChartColor = "red";
Color mycolor = Color.FromName(newitem.ChartColor);

Color myColorAlt1 = myColor.WithA(0x56);
Color myColorAlt2 = myColor.WithA(0x28);

或者,如果您需要立即使用它:
Color mycolor = Color.FromName(newitem.ChartColor).WithA(0x56);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接