我認爲我必須錯過一些明顯的東西,但經過幾個小時的搜索後我無法找到它。是否沒有辦法使用PictureBox或其他控件來包含具有部分透明/ alpha混合像素的圖像,並將其放置在另一個圖像上並根據其下的圖像進行混合?Winforms半透明PNG半透明PNG
例如,這產生的結果欲:
- 放置窗體上的一個面板。
- 添加一個OnPaint處理程序。
- 在OnPaint處理程序中繪製1個PNG,然後在其上繪製另一個PNG,並使用Graphics.DrawImage。
這不:
將一個PictureBox窗體上,將其設置爲PNG。
將另一個PictureBox放在窗體上並將其設置爲PNG。
將第二個圖片框放在第一個圖片框上。
...即使第二個圖片框只是空的,並且具有透明背景色,它仍然覆蓋它下面的圖片。
我讀過這個源於所有winform控件是windows,所以本質上它們不透明。
...但即使是我從Borland的VCL遷移而來的15年前的平臺,有幾個無窗口的控件,所以很難成像winforms並沒有至少有一些簡單的解決方案?
我上面的第一個例子是一個答案,但是,當你只能使用一個大面板並在其中繪製所有「控件」時,這會增加很多工作量。如果您可以使用單獨的鼠標事件/等分開控制,則會更好。即使不是圖像控件,也不需要我自己繪製的控件,只要我可以在每個控件中放置一個圖像,就沒有問題。在VCL中,他們將這稱爲「顏料盒」,只是一個矩形區域,您可以將其放置在窗體上並在其上繪製任何您想要的內容。它有自己的鼠標事件,界限等。如果你沒有畫任何東西,它就像它甚至不存在(100%透明),除了它仍然獲得鼠標事件,因此可以用作「熱點現場「或」目標「。
+1爲「不要猶豫使用OnPaint」。重疊PictureBoxes顯示重疊的圖像增加了質量和複雜性,你真正需要做的就是自己繪製圖像。 – Tergiver
比我想出的要好得多,謝謝!在我的情況下,我有一個很好的圖像作爲背景和3或4圖像,每個圖像都有點擊事件...因此更容易爲每個圖像分別控制,以處理鼠標事件而不必檢查位置等。也很好用IDE來移動它們與代碼。不喜歡有額外的窗口句柄,這是VCL很好的地方(無窗口控件)。 – eselk
這是最好的答案! –