2008-10-02 32 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