- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在实现一个接受两个位图对象的方法。我们可以假设所述对象具有相同的尺寸等。该方法的返回是像素更改列表(存储在自制对象中)。这是以迭代的方式开发的,所以当前的实现是一个基本的实现……简单地处理每个像素并将其与对应的像素进行比较。这种生成更改的方法比可接受的速度慢(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/
我一直在从事一个开源项目。它使用安装在 jdk8 镜像上的构建生成的 debian (.deb) 软件包创建 docker 镜像。 但最近我开始犯错误,不幸的是我无法克服它。一旦通过 Dockerfi
我正在尝试使这些卡片可点击以重定向到另一个屏幕,但我无法弄清楚 let cards = this.state.items.map(item => ( Actions.dog
我是一名优秀的程序员,十分优秀!