2014-01-05 148 views
1

我在這裏有點困惑。在C#中,我的表單具有透明背景,窗體上有一個圖片框。該picturebox有一個很多透明區域的PNG圖像,這是明確的,因爲我看着在Photoshop中...透明度在那裏!透明PNG圖片框

但是,當我運行我的應用程序的PNG圖像是由於某種原因忽略了透明部分?有任何想法嗎?

現在圖像看起來像是試圖做一些部分的透明度,但它做了一個可怕的斑點圖像。

我需要用圖片來說明這一點:

enter image description here

在左邊你可以看到我有設置窗體背景的藍色,並設置不transparancy關鍵。在界面元素之間的透明度,甚至是界面半透明背景之間的透明度,界面PNG的作品!您可以通過圖像查看錶單背景。

但是,在正確的圖像我已經設置窗體透明度鍵與背景顏色相同...它使所有的形式透明,但它似乎忽略了接口項之間的透明部分PNG ...使它看起來像表單背景顏色仍然在圖片框下方,並使這個可怕的參差不齊的邊緣。

因此,如果PNG的工作表單不透明,爲什麼它不隱藏PNG下的表單的其餘部分?我在這裏應該看到的是通過PNG界面元素和半透明部分展示的桌面......但我所看到的只是我在表單上設置的顏色!

我希望這是有道理的。

我自那以後才發現它只發生在PNG部分有陰影?

+1

答案(S)在這裏可能會幫助http://stackoverflow.com/questions/4144371/a-picturebox-problem – keyboardP

+0

我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

好的感謝編輯它......真的有點愚蠢的規則? – Glen

回答

0

發生這種情況,因爲如您所說,您正在使用陰影。透明度鍵的作用是在繪製表格後移除您從顯示器中指定的確切顏色,因此當陰影與背景混合在一起時,會創建一種不透明的新顏色。你可以通過使用一些API調用,並創建一個每像素掩碼(基本上是一個灰度位圖,告訴每個像素透明度應該是什麼)來繞過這個。

有一個很好的例子項目here

+0

你確定沒有更簡單的解決方案嗎?我不明白爲什麼它不會像應該那樣渲染PNG。我甚至嘗試在透明窗體上的圖片框中使用圖像,但它有相同的問題 – Glen

+0

不幸的是,我確定。問題在於GDI技術最後一次更新時,是在Windows XP的發佈 - 在png成爲GUI廣泛使用的格式之前。 WPF應該支持半透明的窗口,但只要你使用WinForms(和GDI,按範圍),你唯一的選擇就是選擇一種透明的顏色或者使用一個位掩碼。 –