2013-06-24 131 views
0

我正在處理VS 2008中的表單應用程序,並且在重疊兩個圖像時卡住了。這些圖像是透明的,所以他們應該能夠融合在一起,但結果是下面顯示: enter image description here透明度問題C#

我已經看到了類似的帖子這一個,但似乎無法找出爲什麼這兩個圖像不能融合在一起。下面是我如何去了解它的代碼:

  InitializeComponent(); 
     this.Width = 700; 
     this.Height = 768; 

     Bitmap BackgroundImg = new Bitmap(@"C:\Users\Classic.bmp"); 
     Bitmap img = new Bitmap(@"C:\Users\Lime.bmp"); 
     backImage.Image = BackgroundImg; 
     backImage.Width = 700; 
     backImage.Height = 768; 
     backImage.Location = new Point(0, 0); 
     overImage.Image = img; 
     overImage.Width = img.Width; 
     overImage.Height = img.Height; 
     overImage.Parent = backImage; 
     //overImage.BackColor = Color.Transparent; 
     overImage.Location = new Point(200, 200); 

backImage和overImage是pictureBoxes

+0

也許這篇文章會有幫助:http://www.codeproject.com/Tips/201129/Change-Opacity-of-Image-in-C – Csharp

+0

檢查了這一點:http://devblog.antongochev.net/ 2008/07/30/create-custom-ui-appearance-for-winforms-layered-form-part-5/ –

回答

0

我認爲你的問題來自於一個事實,即位圖圖像不支持透明度。

與.PNG(例如)嘗試,並使用在下面的鏈接中描述的方法SetColorKey:http://msdn.microsoft.com/en-us/library/e7755txx.aspx

+0

他們是.bmp文件,但壓縮PNG文件 – haysam

+0

擴展名.bmp ** – haysam

+0

好啊,你可以嘗試把它們恢復爲「普通」.png文件?我不確定它爲什麼成爲.bmp文件。此外,鏈接中描述的SetColorKey方法可以幫助您,但您必須使用Image類,而不是Bitmap類。 編輯:顯然這種方法也適用於bmp的。我只能假設那裏,因爲我可以在他們展示的例子中看到它。 –

2

你的問題是與overImage.Parent屬性。 PictureBox支持對其父項的透明度。但overImage的父代是表格,而不是backImage。所以你將形式看作是背景,而不是圖像。注意如何使用表單的BackgroundImage屬性而不是backImage修復問題。

發生這種情況是因爲PictureBox不是ContainerControl。所以當你把圖片放在圖片上時,它只是看起來就像它是一個backImage的子控件。事實並非如此,設計師將這一形式作爲父母。您可以從Location屬性和View +(其他窗口)+文檔大綱窗口中看到。這個窗口非常清楚地顯示了親子關係。請注意,如何拖動overImage以使其成爲backImage的子項也不起作用。

將Parent屬性更改爲backImage是可能的,您必須這樣做in code

另一個簡單的解決方法是不使用PictureBox控件,而只是使用e.Graphics.DrawImage()在窗體的Paint事件中繪製圖像。簡單的油漆層,否則WPF實現透明度的方式。需要兩行代碼,使您的UI更快。