删除图像透明度

bre*_*iba 4 .net c# 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;
}
Run Code Online (Sandbox Code Playgroud)

输入图像的示例:

我的验证码图片

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

输出图像

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

谢谢!

Tim*_*lds 5

在将其他图像绘制在其上之前CompositingMode,需要将Graphics对象设置为SourceOver.

g.Clear(Color.White);
g.CompositingMode = CompositingMode.SourceOver;
g.DrawImage(src, 0, 0);
Run Code Online (Sandbox Code Playgroud)

默认设置CompositingModeSourceCopy,将图像中的透明黑色(R = G = B = A = 0)像素src渲染为黑色像素.SourceOver将进行alpha混合,这是你正在寻找的.

有关详细信息,请参见此处:CompositingMode枚举