c/c++将RGBQUAD数组分配给位图
c/c++ assign RGBQUAD array to a bitmap
我正在做一个程序,你可以截图一个窗口,然后扫描图片的每个像素。但我在将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分配给屏幕截图的位图?
多个问题。
-
RGBQUAD **pixel = malloc(...
和free(*pixel)
似乎是问题所在。我想你想要RGBQUAD *pixel = malloc((ssWidth * ssHeight)* sizeof(RGBQUAD));
(只有1个*
) -
怀疑
GetDIBits()
s/bpixel
中的pixels
。 -
我想你想要
y_var = 0;
(x_var=0;也) -
ComparePixel()
没有定义,但我认为你想要更接近if(ComparePixel(pixel[x_var+(y_var*ssWidth)], the_pixel_to_compare_against))
的东西 -
两个for循环之后的
free(*pixel);
s/b应为free(pixel)
;
相关文章:
- C / C++ 移位/偏移/向左或向右移动位图?
- 如何在快板的屏幕中显示子位图的绘制?
- CreateDIBSection为同一图像返回不一致的位图位值
- C++ 位图中的 ttc 字体
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 难以从 CImageList 设置菜单项位图
- 如何将位图拉伸到父面板(wxWidgets 自定义)
- 如何使用 freetype2 访问单色位图中的像素状态
- 将位图 (bmp) 转换为具有透明度的 png (Windows c++)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 位图到垫子/2D 数组
- Gdiplus位图没有Alpha通道
- 如何从路径字符串加载Gdiplus::位图
- 在C++中使用Gdiplus创建透明位图
- 用C++压缩内存中的位图
- C++gdi::内存中的位图到PNG图像
- LoadImage 函数不适用于 ImageMagick 创建的位图图像
- (位图)LoadImage() 返回 NULL,GetLastError() 返回 0
- 将Qt qml文件转换为位图图像
- 使用自定义视图的ICS中位图分配的可用内存