我将一个图像加载到C#中的Bitmap中,并使用我扫描的文档中的渐变背景。它的示例如下图所示:
我在C#中的目标是删除背景,以便我拥有纯白色背景。现在我自己似乎找不到办法做到这一点。有没有办法以某种方式实现这一目标?
提前致谢。
这是一个使用LockBits
的版本。
前提是如果它不是黑色则将其改为白色。
GetPixel
和SetPixel
的速度会更快注意:显然这会破坏任何抗锯齿和平滑,它会因某些图像类型和其他各种问题而失败。
using (var bmp = new Bitmap(@"D:\Test.png"))
{
var data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppPArgb);
var white = Color.White.ToArgb();
var black = Color.Black.ToArgb();
try
{
var length = (int*)data.Scan0 + bmp.Height * bmp.Width;
for (var p = (int*)data.Scan0; p < length; p++)
if (*p != black) *p = white;
}
finally
{
// unlock the bitmap
bmp.UnlockBits(data);
bmp.Save(@"D:\Output.Bmp", ImageFormat.Bmp);
}
}
产量
如果您知道渐变颜色(例如,只有部分RGB颜色负责红色变化)或至少是文本颜色(例如,如果它总是黑色),那么您可以遍历所有图像的像素,然后:
GetPixel()
获取像素颜色。SetPixel()
将颜色更改为白色。对于渐变,它应该足够了。对于更复杂的背景,它需要更复杂的算法。