2008-10-02 30 views
6

我有一個System.Drawing.Image類型的對象,並且想讓每個像素都具有某種特定的顏色,例如黑色,透明(即將alpha設置爲0爲這個像素)。使具有特定顏色的圖像的每個像素都透明

這樣做的最好方法是什麼?

+0

我有一個非常類似的問題,我想知道如果你能幫助我:http://stackoverflow.com/questions/1096165/transparent-winform-using-selective-顏色 – 2009-07-08 05:28:06

回答

6

一個很好的方法是使用類設置顏色列表以在繪圖發生時重新映射。這樣做的好處是性能好,並且可以非常容易地改變重映射顏色。嘗試這樣的事情代碼...

ImageAttributes attribs = new ImageAttributes(); 
List<ColorMap> colorMaps = new List<ColorMap>(); 
// 
// Remap black top be transparent 
ColorMap remap = new ColorMap(); 
remap.OldColor = Color.Black; 
remap.NewColor = Color.Transparent; 
colorMaps.Add(remap); 
// 
// ...add additional remapping entries here... 
// 
attribs.SetRemapTable(colorMaps.ToArray(), ColorAdjustType.Bitmap); 
context.Graphics.DrawImage(image, imageRect, 0, 0, 
          imageRect.Width, imageRect.Height, 
          GraphicsUnit.Pixel, attribs); 
2

你只知道它是一個圖像嗎?如果它是位圖,則可以調用LockBits,檢查/修復每個像素,然後再次解鎖位。

3

從圖像構造一個位圖,然後在該位圖上調用MakeTransparent()。它允許您指定應呈現爲透明的顏色。

+0

MakeTransparent可以工作,但很可能你想編寫一個功能,做同樣的事情,但運行容忍。這使得在合成中更平滑的混合。 – plinth 2008-10-02 12:49:17