gpt4 book ai didi

c++ - 在屏幕上查找图像

转载 作者:行者123 更新时间:2023-11-27 23:40:02 26 4
gpt4 key购买 nike

我想知道如何解决这个问题。如果屏幕包含图像(例如红点),我想每隔 X 秒检查一次,如果是,则返回 True。我对 Python 非常熟悉,那里有一些简单的解决方案。但是我还没有找到类似的解决方案。

我基本上想做的是:

  1. 截图
  2. 在屏幕截图中找到图片 X
  3. 返回 bool 值

研究了 OpenCV 并可能以这种方式解决它,但可能有点过度扩展。我正在考虑让 getPixel 遍历屏幕上的所有像素。但它非常慢。

#include <Windows.h>
#include <iostream>

using namespace std;

int main()
{
HWND runelite = GetForegroundWindow();
HMONITOR monitor = MonitorFromWindow(runelite, MONITOR_DEFAULTTONEAREST);
MONITORINFO info;
info.cbSize = sizeof(MONITORINFO);
GetMonitorInfo(monitor, &info);
int monitor_width = info.rcMonitor.right - info.rcMonitor.left;
int monitor_height = info.rcMonitor.bottom - info.rcMonitor.top;

int r, g, b;

HDC screenshot = GetDC(NULL);

for (int i = 0; i < monitor_height; i++) {
for (int j = 0; j < monitor_width; j++) {
DWORD color = GetPixel(screenshot, j, i);
cout << "Scanning -> X: " << j << " Y: " << i << endl;
r = GetRValue(color);
g = GetGValue(color);
b = GetBValue(color);
if (r == 0 && g == 0 && b == 0) {
cout << "Button found by color!" << endl;
goto end;
}
}
}

end:
ReleaseDC(NULL, screenshot);
return 0;
}

最佳答案

如果将 HDC 的内容复制到另一个位图并获取指向图像数据的指针并循环处理它,则可以大大提高速度。

创建内存位图

HDC memDC = CreateCompatibleDC ( hDC );
HBITMAP memBM = CreateCompatibleBitmap ( hDC, nWidth, nHeight );
SelectObject ( memDC, memBM );

然后通过BitBlt 将屏幕数据bitblt 到该位图,并使用GetDIBits 获取位图数据。

另请注意,GetDC(NULL) 不会生成屏幕截图,但可以让您访问 windows live 主 HDC。直接在桌面上绘制。这就是为什么它上面的每个 GetPixel 都需要相当长的时间。

关于c++ - 在屏幕上查找图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55893011/

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