gpt4 book ai didi

c# - 在每个像素的基础上快速比较两个位图对象

转载 作者:太空狗 更新时间:2023-10-30 00:58:10 26 4
gpt4 key购买 nike

我目前正在实现一个接受两个位图对象的方法。我们可以假设所述对象具有相同的尺寸等。该方法的返回是像素更改列表(存储在自制对象中)。这是以迭代的方式开发的,所以当前的实现是一个基本的实现……简单地处理每个像素并将其与对应的像素进行比较。这种生成更改的方法比可接受的速度慢(500 毫秒左右),因此我正在寻找更快的过程。

我的想法是将图像分解成 strip 并在新线程上运行每个比较,或者首先将屏幕区域作为对象进行比较,然后仅根据需要进行详细检查。

供您理解的当前代码...

   for (int x = 0; x < screenShotBMP.Width; x++)
{
for (int y = 0; y < screenShotBMP.Height; y++)
{
if (screenShotBMP.GetPixel(x, y) != _PreviousFrame.GetPixel(x, y))
{
_pixelChanges.Add(new PixelChangeJob(screenShotBMP.GetPixel(x,y), x, y));
}
}
}

正如您将从代码中推导出的,相关类的概念是截取屏幕截图并根据之前截取的屏幕截图生成像素更改列表。

最佳答案

你绝对应该看看 Lockbits操作位图数据的方法。

它比 GetPixel/SetPixel 快几个数量级。

编辑:
检查this link对于一些代码(虽然是在 VB 中,但你应该明白)几乎可以做你想做的。它只是检查两个位图是否相等并返回 true 或 false。您可以更改该函数,以便在必要时将每个像素检查添加到您的 _pixelChanges 列表中,并返回此列表而不是 bool 值。

此外,如果您交换迭代器循环,它可能会更快。即让内循环遍历 X,外循环遍历 Y。

关于c# - 在每个像素的基础上快速比较两个位图对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3433996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com