2010-03-29 54 views
2

我有一個標準的圖片框控件,上面有圖片。我想添加半透明圖層。它不會隱藏圖像,它會是某種過濾器。在picturebox上增加額外的半透明層

我該怎麼辦?

+0

到目前爲止你有什麼? – 2010-03-29 11:10:17

+0

你能澄清你的答案嗎?我的字典在'迄今'上給出了不同的含義... 我有一個帶有圖像的圖片框。我用它像一個按鈕。所以當我點擊一個圖片框按鈕時,我想添加額外的圖層。該圖層指示按下了圖片框。 – 2010-03-29 11:41:54

回答

1

的代碼將是類似於:

private void pictureBox1_Paint (object sender, PaintEventArgs e) 
{ 
    using (SolidBrush b = new SolidBrush(Color.FromArgb(128, Color.White)) 
    { 
     e.Graphics.FillRectangle (b, 0, 0, pictureBox1.Width, pictureBox1.Height); 
    } 

然而,上面簡單地使用單一色彩刷其opactity設置爲128還有其他可用刷類的代碼,如LinearGradientBrushTextureBrushPAthGradientBrushHatchBrush

建議 畫自定義效果,如你想(爲按鈕按下狀態),推薦的做法是生成你可以在你的應用程序運行時創建或使用外部程序預渲染圖像如Adobe Photoshop,然後保存這些圖像。

然後,繪畫代碼將簡單地拍攝表示「按鈕」當前狀態的圖像,並在覆蓋pictureBox1_Paint方法中繪製該圖像。

與僅在應用程序中的不同狀態更改時間重繪相同狀態相反,此技術可提高圖形繪製性能。

+0

我已經有了預渲染的圖像。我將它們存儲在資源文件中。 感謝您的輸入。我將使用你的代碼。 順便說一句,你知道如何創建一個lineargradientbrush,看起來像標題欄的圖片框?我嘗試了幾次,但沒有結果... – 2010-03-29 13:15:28

+0

嗨亞歷山大,以及標題欄的顏色可以在SystemColors.ActiveCaption和SystemColors.InactiveCaption中找到。只是好奇,你想模仿窗口標題欄中的按鈕嗎?如果是這樣,您仍然必須管理所有相關的Windows消息,但要繪製一條消息,請查看ControlPaint.DrawCaptionButton。 – 2010-03-29 19:19:29

0

可以註冊Paint事件和寫像這樣的代碼:

private void pictureBox1_Paint (object sender, PaintEventArgs e) 
    { 
     e.Graphics.FillRectangle (Brushes.Transparent, 0, 0, pictureBox1.Width, pictureBox1.Height); 
    } 

您需要genereate半透明刷(改所需顏色的ALPA級)

的更多信息關於控件中的自定義繪畫可以在MSDN

這只是一個小的代碼片段。要使用Print事件和Graphics對象,請首先閱讀MSDN內容。

+0

上面的代碼不影響位於圖片框上的圖片..它隻影響圖片框的背景... – 2010-03-29 13:07:46

+0

我的答案和接受的答案沒有太大的區別。 – crauscher 2010-03-29 16:44:57

+0

透明畫筆與空畫筆相同。在提供的代碼示例中,它不會影響圖片框上的圖像。雖然你的回答指出亞歷山大應該使用半透明的筆刷,但是從樣本*如何創建它並不清楚。 :-) – 2010-03-29 19:22:49