如何打印 RGBQUAD 结构中的值?

How do you print the values from an RGBQUAD structure?

我正在尝试截取屏幕左上角的 100 x 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";

                }


}

P.S。我很确定我应该使用 'BitBLT' 来获得一个像素的正方形,但对如何使用该功能感到困惑,所以任何关于这方面的提示也会很棒。

谢谢!

这是一个有用的函数:

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 << "    ";
}

此示例展示了打印 R​​GBQUAD 结构的一种基本方法。
顺序更改为 RGB。 Microsoft Docs 定义的结构是:

typedef struct tagRGBQUAD {
  BYTE rgbBlue;
  BYTE rgbGreen;
  BYTE rgbRed;
  BYTE rgbReserved;
} RGBQUAD;