Я пытаюсь сделать снимок экрана размером 100 на 100 квадратов в верхнем левом углу экрана, а затем распечатать все шестнадцатеричные значения цвета пикселей на консоли. Прямо сейчас он просто печатает пробелы.
Вот мой код:
#include <wingdi.h>
#include <windows.h>
#include <iostream>
using namespace std;
int main(){
HWND desktop = GetDesktopWindow();
HDC desktopHdc = GetDC(desktop);
HDC hdc = CreateCompatibleDC(desktopHdc);
HBITMAP hCaptureBitmap = CreateCompatibleBitmap(hdc, 100, 100);
SelectObject(hdc, hCaptureBitmap);
BITMAPINFO bmi = {0};
bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader);
bmi.bmiHeader.biWidth = 100;
bmi.bmiHeader.biHeight = 100;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB;
RGBQUAD *pPixels = new RGBQUAD[100 * 100];
BitBlt(hdc, 0, 0, 100, 100, desktopHdc, 0, 0, SRCCOPY);
GetDIBits(hdc, hCaptureBitmap, 0, 100, pPixels, &bmi, DIB_RGB_COLORS);
for (int i = 0; i < 10000; i++){
cout << static_cast<unsigned int>(pPixels[i].rgbRed) << static_cast<unsigned int>(pPixels[i].rgbGreen) << static_cast<unsigned int>(pPixels[i].rgbBlue) << "\n";
}
}
PS Я почти уверен, что должен использовать BitBLT, чтобы получить квадрат пикселей, но не понимал, как использовать эту функцию, так что любые советы по этому поводу тоже будут полезны.
Спасибо!