我有一张图像被加载到C#中的位图中,其中包含我扫描的文档中的渐变背景。 例如,如下图所示:
我现在在C#中的目标是删除背景,以使背景变成白色。现在,我本人似乎找不到解决方法。有办法以某种方式实现这一目标吗?
谢谢。
答案 0 :(得分:2)
这是使用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);
}
}
输出
答案 1 :(得分:0)
如果您知道渐变色(例如,仅部分RGB颜色引起红色变化)或至少是文本的颜色(例如,如果始终为黑色),则可以遍历图像的所有像素,然后:>
GetPixel()
获取像素颜色。SetPixel()
将颜色更改为白色。 对于渐变,它应该足够了。对于更复杂的背景,则需要更复杂的算法。