c/c++将RGBQUAD数组分配给位图

c/c++ assign RGBQUAD array to a bitmap

本文关键字:分配 位图 数组 RGBQUAD c++      更新时间:2023-10-16

我正在做一个程序,你可以截图一个窗口,然后扫描图片的每个像素。但我在将RGBQUAD数组分配给拍摄的屏幕时遇到了问题。每个像素都具有相同的RGB,即205。这是我的一段代码:

RGBQUAD *pixel = malloc((ssWidth * ssHeight)* sizeof(RGBQUAD));
hdcScreen = GetDC(gameHandle);
hdc = CreateCompatibleDC(hdcScreen);
hBmp = CreateCompatibleBitmap(hdcScreen, ssWidth, ssHeight);
SelectObject(hdc, hBmp);
BitBlt(hdc, 0, 0, ssWidth, ssHeight, hdcScreen, xCenter, yCenter, SRCCOPY);
GetDIBits(hdc, hBmp, 0, ssHeight, pixel, &bmpInfo, DIB_RGB_COLORS);
int p = -1;
for(y_var = 0; y_var < ssWidth; y_var++)
{
    for(x_var = 0; x_var < ssHeight; x_var++)
    {
        if(ComparePixel(&pixel[++p]))
        {
            SetCursorPos(xCenter + x_var + 3, yCenter + y_var + 3);
        }
    }
}
bool ComparePixel(RGBQUAD *pixel)
{
    printf("%d, %d, %dn"; pixel -> rgbRed, pixel -> rgbGreen, pixel -> rgbBlue);
    return false;
}

ComparePixel(RGBQUAD*pixel)函数只检查RGB值。如何将RGBQUAD分配给屏幕截图的位图?

多个问题。

  1. RGBQUAD **pixel = malloc(...free(*pixel)似乎是问题所在。我想你想要RGBQUAD *pixel = malloc((ssWidth * ssHeight)* sizeof(RGBQUAD));(只有1个*

  2. 怀疑GetDIBits() s/b pixel中的pixels

  3. 我想你想要y_var = 0;(x_var=0;也)

  4. ComparePixel()没有定义,但我认为你想要更接近if(ComparePixel(pixel[x_var+(y_var*ssWidth)], the_pixel_to_compare_against)) 的东西

  5. 两个for循环之后的free(*pixel); s/b应为free(pixel)