删除图像透明度

时间:2014-12-01 17:07:47

标签: c# .net bitmap

我在大学时正在研究机器学习问题,我的第一份工作是将图像转换成黑白图像。

问题是我的图片有透明度,我不知道如何删除它。

我在尝试什么:

public static Bitmap RemoveTransparency (Bitmap src)
{            
    Bitmap   target = new Bitmap (src.Size.Width, src.Size.Height);
    Graphics g      = Graphics.FromImage (target);

    g.Clear (Color.White);            
    g.DrawImage (src, 0, 0);

    return target;
}

输入图像的示例:

My captcha image

“RemoveTransparency”调用后的输出图像示例:

Output image

有谁知道发生了什么事?看起来像背景,字母有相同的颜色...如果我着色为白色,我的背景是黑色的?

谢谢!

1 个答案:

答案 0 :(得分:5)

您需要先将CompositingMode对象的Graphics设置为SourceOver,然后再将其他图片绘制到其上。

g.Clear(Color.White);
g.CompositingMode = CompositingMode.SourceOver;
g.DrawImage(src, 0, 0);

默认CompositingModeSourceCopy,即src图片中的透明黑色(R = G = B = A = 0)像素并将其渲染为黑色像素。 SourceOver将执行alpha混合,这正是您正在寻找的。

详情请见此处:CompositingMode Enumeration