2010-06-11 42 views
4

我有一个Color,我有一个方法应该返回一个更“透明”的颜色版本。我尝试以下方法:Set A Transparent Color

public static Color SetTransparency(int A, Color color) 
{ 
    return Color.FromArgb(A, color.R, color.G, color.B); 
} 

但由于某些原因,无论A是什么,返回Color的透明度级别就不会改变。

有什么想法?

+0

正确超载?该错误可能在那里。 – strager 2010-06-11 07:17:54

+1

这应该工作,但你在哪里使用颜色?有些控件不能很好地处理alpha值。 – 2010-06-11 07:18:21

+0

@strager,我使用'SetTransparency'返回的Color,但它不能在我的控件中工作,很有趣。 – Graviton 2010-06-11 07:22:25

回答

12

很好,看起来还好我,除了你正在使用的Color.R(ETC),而不是color.R - 你确定你实际使用的返回Color而不是假设它会改变现有的颜色?你如何确定“透明度水平”不会改变?

这里显示出α值在返回的颜色真正正确的例子:

using System; 
using System.Drawing; 

class Test 
{ 
    static Color SetTransparency(int A, Color color) 
    { 
     return Color.FromArgb(A, color.R, color.G, color.B); 
    } 

    static void Main() 
    { 
     Color halfTransparent = SetTransparency(127, Color.Black); 
     Console.WriteLine(halfTransparent.A); // Prints 127 
    } 
} 

没有意外出现。如果您提供一个简短但完整的程序来证明您遇到的具体问题,那将非常有帮助。你确定无论你在做什么颜色,即使支持透明度?这种方法有效地已经存在了Color.FromArgb(int, Color)

注意。

+0

是的,我使用返回的Color。 – Graviton 2010-06-11 07:22:45

+0

我想也许我使用的组件有问题。我会问组件提供商,并参见 – Graviton 2010-06-11 07:30:00

0

您的命名可能有问题。 我做了一个标准的Windows窗体项目,有2个按钮并添加了一些代码,点击按钮时,它们各自的颜色实际上会消失。

我同意乔恩斯基特,要实现一个重复的方法,也是所有参数名应该以小写字母开头,所以“A”,而不是“A”

代码:

private void Form1_Load(object sender, EventArgs e) 
{ 
    button1.BackColor = Color.Red; 
    button2.BackColor = Color.Green; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    Color c = button1.BackColor; 
    button1.BackColor = Color.FromArgb(Math.Max(c.A - 10, (byte)0), c.R, c.G, c.B); 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    Color c = button2.BackColor; 
    button2.BackColor = Color.FromArgb(Math.Max(c.A - 10, (byte)0), c.R, c.G, c.B); 
} 

public static Color SetTransparency(int a, Color color) 
{ 
    return Color.FromArgb(a, color.R, color.G, color.B); 
} 
3

你如何使用`Color`只需使用FromArgb

var color = Color.FromArgb(50, Color.Red); 
+0

方法名称现在正确! – 2016-12-08 11:50:48