我有一個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