Как распечатать значения из структуры RGBQUAD? - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь сделать снимок экрана размером 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, чтобы получить квадрат пикселей, но не понимал, как использовать эту функцию, так что любые советы по этому поводу тоже будут полезны.

Спасибо!

1 Ответ

1 голос
/ 01 августа 2020

Вот полезная функция:

void Print_RGBQUAD(const RGBQUAD& r)
{
    std::cout << " " << setw(2) << hex << (unsigned int)(r.rgbRed);
    std::cout << " " << setw(2) << hex << (unsigned int)(r.rgbGreen);
    std::cout << " " << setw(2) << hex << (unsigned int)(r.rgbBlue);
    std::cout << "    ";
}

В этом примере показан один из основных методов печати структуры RGBQUAD. Порядок изменен на RGB. Структура, определенная в Microsoft Docs, выглядит так:

typedef struct tagRGBQUAD {
  BYTE rgbBlue;
  BYTE rgbGreen;
  BYTE rgbRed;
  BYTE rgbReserved;
} RGBQUAD;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...