C#比较两个图像之间的像素并只写出差异的更快方法

MxL*_*evs 4 c# image

只需对两个非常相似的图像(一个图像是另一个图像的编辑版本)进行逐像素比较,然后将差异写入新文件。

for (int y = 0; y < height; y++)
{
    for (int x = 0; x < width; x++)
    {
        pix1 = src.GetPixel(x, y);
        pix2 = comp.GetPixel(x, y);
        if (pix1 != pix2)
        {
            dest.SetPixel(x, y, pix1);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

src并且comp是两个图像进行比较,并dest仅仅是一个新的形象。这需要相当长的时间。

什么是更快的方法?
也许没有必要为了比较而实际获取像素?

Kar*_*ren 5

要比较像素,您需要读取它们。但是,这GetPixel()是一种非常慢的方法,因此不建议这样做,除非您仅检查了非常少量的数据。

为了获得更好的性能,最好的方法是使用不安全的代码并改用指针。互联网上有很多这样的示例,下面是我发现的一些示例,它解释了一些问题并为此提供了两种不同的解决方案。

http://davidthomasbernal.com/blog/2008/03/13/c-image-processing-performance-unsafe-vs-safe-code-part-i

一定要同时检查第二部分,他在其中有一些基准并链接到完整的资料。