2013-07-08 63 views
0

我使用多層圖片框創建程序,圖片框的圖像從內存中的位圖動態更新,並且我想清除位圖上選定的部分以透明顏色,以便我可以看到圖片框背後的圖像它。清除透明位圖的部分

這裏是我的代碼

Dim gBmp As Graphics = Graphics.FromImage(GraphLayer(LayerArray)) 
Dim TileSrcCrop As New Rectangle(nVal(xTile), nVal(yTile), TileSize, TileSize) 
Dim TileDrawSize As New Rectangle(nVal(H), nVal(V), TileSize, TileSize) 

gBmp.DrawImage(GraphImage(LayerArray), TileDrawSize, TileSrcCrop, GraphicsUnit.Pixel) 
PicMap(LayerArray).Image = GraphLayer(LayerArray) 

感謝

+0

對於「選定部分」在此片段中可能意味着什麼,幾乎沒有任何指導。您需要創建一個新的位圖,將感興趣的位圖繪製到其中,然後使用Brushes.Transparent爲Graphics.FillRectangle創建一個孔。 –

+0

同樣,「PicMap」數組中的PictureBox也是相互堆疊在一起的,您希望每個PictureBox的部分都是透明的,以便您可以看到下面的其他** PictureBoxes?如果是的話,那麼這個**不能通過使圖像處於透明狀態來完成。 .Net中的透明度僅限於容器控制。因此,如果你使圖像的一部分透明,它將只在父容器中顯示「下面」的對應顏色; **不**以下任何其他控件的顏色。重疊控件在.Net中不起作用。 –

+0

要實現**重疊**透明度的PictureBoxes,您必須通過修改Region()屬性在控件中逐字打出一個「空洞」。不在區域()中的部分將被剪切,允許看到下面的控件。您可以通過使用GraphicsPath()並將其傳遞給Region()構造函數來構建正確的部分。 –

回答

0

什麼我要說的話可能只適用於Windows的圖標,但IIRC,左上角的像素必須分配要的顏色指定爲透明度的顏色。您通常會看到MS使用洋紅色(255,0,255)。這被稱爲透明度掩碼。然後,在任何你想讓顏色變得透明的地方,你可以使用你放置在左上角像素的顏色。

HTH - 讓我知道它是否只適用於圖標,但我認爲它也適用於Windows位圖文件。

+0

感謝您的回覆 我一直在使用的方法MakeTransparent(),但我使用圖像中的alpha通道,所以如果我使用透明度蒙版,圖像不再看起來半透明 –

+0

啊,我明白了。另外,我忘記了位圖(即32位的)支持alpha通道...呵呵,在一天的時候,透明遮罩就是我們用於Windows位圖的所有東西。 :) – fourpastmidnight