こんにちはみんな私は次のコードを持っています:
#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)]);
}