2010-06-11 41 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