以下使用 GetDIBits() 的代码没有给我想要的输出:
#include <windows.h>
#include <iostream>
using namespace std;
int main() {int i; HDC MemDC=CreateCompatibleDC(NULL);
HBITMAP hBit=(HBITMAP)LoadImage(NULL,(LPCTSTR)"F:\\gBit.bmp",IMAGE_BITMAP,1366,768,LR_CREATEDIBSECTION);
SelectObject(MemDC,hBit);
BITMAPINFO bmi;
bmi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth=1366;
bmi.bmiHeader.biHeight=1;
bmi.bmiHeader.biPlanes=1;
bmi.bmiHeader.biBitCount=24;
bmi.bmiHeader.biCompression=BI_RGB;
bmi.bmiHeader.biSizeImage=0;
bmi.bmiHeader.biXPelsPerMeter=0;
bmi.bmiHeader.biYPelsPerMeter=0;
bmi.bmiHeader.biClrUsed=0;
bmi.bmiHeader.biClrImportant=0;
BYTE p[3*1366];
GetDIBits(MemDC,hBit,500,1,p,&bmi,DIB_RGB_COLORS); //My screen width is 1366 and I want to get the pixels of the 500th line
for (i=0; i<3*1366; i+=3) {cout<<p[i]<<endl;}
DeleteObject(hBit);
ReleaseDC(NULL,MemDC); DeleteDC(MemDC);
}
(gBit.bmp 是一个 1366x768 的位图,完全是白色的。)
我是 C++ 新手,几乎不知道如何使用这个函数。对于所有大于或等于 0 且小于或等于 3*1366 的 i,我期望 p[i] 为 255,因为 gBit 的每个像素都是白色的,但正在显示随机值,其中大部分为 0。我没有正确使用此功能还是其他地方的错误?
编辑:GetDIBits() 似乎无法将像素数据保存在 p 中,因为当我删除包含 GetDIBits() 的行时会返回相同的值。这次我没有选择 hBit 进入 DC。还有什么问题?