【发布时间】:2013-03-31 00:20:04
【问题描述】:
大家好,我有以下代码:
#define ScreenXResolution GetDeviceCaps(GetDC(0), HORZRES)
#define ScreenYResolution GetDeviceCaps(GetDC(0), VERTRES)
BYTE *screenData = malloc(sizeof(BYTE) * (3 * ScreenXResolution * ScreenYResolution));
captureScreenshot(&screenData);
void captureScreenshot(BYTE *screenData)
{
HDC hdc = GetDC(NULL), hdcMem = CreateCompatibleDC(hdc);
HBITMAP hBitmap = CreateCompatibleBitmap(hdc, ScreenXResolution, ScreenYResolution);
BITMAPINFOHEADER bmi = {0};
bmi.biSize = sizeof(BITMAPINFOHEADER);
bmi.biPlanes = 1;
bmi.biBitCount = 24;
bmi.biWidth = ScreenXResolution;
bmi.biHeight = -ScreenYResolution;
bmi.biCompression = BI_RGB;
SelectObject(hdcMem, hBitmap);
BitBlt(hdcMem, 0, 0, ScreenXResolution, ScreenYResolution, hdc, 0, 0, SRCCOPY);
GetDIBits(hdc, hBitmap, 0, ScreenYResolution, screenData, (BITMAPINFO*)&bmi, DIB_RGB_COLORS);
DeleteObject(hBitmap);
DeleteDC(hdcMem);
ReleaseDC(NULL, hdc);
}
我想要实现的是截取他们的屏幕截图并将其放入 screenData。
我需要它的原因是我可以在任何位置检查它是否是某种 RGB 颜色,但我在这样做时遇到了问题。
如果有人可以帮助我,将不胜感激。
谢谢!
编辑:添加了内存分配,我尝试获取 RGB 的方式是通过一个返回 colorref 的函数,如下所示:
COLORREF getRGBFromScreenshot(BYTE *screenshot, int x, int y)
{
return RGB(screenshot[3 * ((y * ScreenXResolution) + x) + 2], screenshot[3 * ((y * ScreenXResolution) + x) + 1], screenshot[3 * ((y * ScreenXResolution) + x)]);
}
【问题讨论】:
-
这里有问题吗?你有什么“问题”?