我有一个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
的透明度级别就不会改变。
有什么想法?
我有一个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
的透明度级别就不会改变。
有什么想法?
很好,看起来还好我,除了你正在使用的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)
注意。
您的命名可能有问题。 我做了一个标准的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);
}
你如何使用`Color`只需使用FromArgb
var color = Color.FromArgb(50, Color.Red);
方法名称现在正确! – 2016-12-08 11:50:48
正确超载?该错误可能在那里。 – strager 2010-06-11 07:17:54
这应该工作,但你在哪里使用颜色?有些控件不能很好地处理alpha值。 – 2010-06-11 07:18:21
@strager,我使用'SetTransparency'返回的Color,但它不能在我的控件中工作,很有趣。 – Graviton 2010-06-11 07:22:25