【发布时间】:2016-01-08 02:00:39
【问题描述】:
我有一堆方格,每个方格都有我需要识别的特定身份/符号。到目前为止,我有类似的东西:
#include <iostream>
#include <windows.h>
using namespace std;
int main() {
HDC dc = GetDC(0);
COLORREF color;
int sum, x, y;
while (true) {
sum = 0;
Sleep(100);
for (x = 512; x < 521; x++) {
for (y = 550; y < 565; y++) {
color = GetPixel(dc, x, y);
sum = GetRValue(color) + GetBValue(color) + GetGValue(color);
}
}
cout << "SUM: " << sum << endl;
}
return 0;
}
显然到目前为止它只扫描了一个块。问题在于,即使它只有 100 多像素,它也需要非常长的时间。我什至无法想象会发生什么。每次重复需要一秒多,也许两秒。我能做些什么?必须有一种更快的方法来做到这一点。如果我不能查询单个像素,是否有办法获取屏幕区域?该区域不在我的程序窗口内。
【问题讨论】:
-
Blit 到一个DIB,然后直接读取内存。
-
比你总是知道我的问题的答案更令人惊奇的是,你似乎总是第一个回答,我想我现在已经失去了三四次了。再次感谢
-
在重新编写所有代码之前,您可能只想尝试交换哪个循环是内部的,哪个是外部的。以非顺序(内存)顺序访问像素会对缓存产生相当严重的影响。
-
是的,获取和设置像素功能很慢。这是因为信息的顺序。基本上:获取和设置像素仅在您需要启用彩色鼠标(或您正在处理的任何事情)时才有用
-
只输出最后一次迭代中
sum的值,因为每次迭代都会覆盖它。你的意思是sum += GetRValue...?