Windows 如何使用GDI从位图中读取像素?

Windows 如何使用GDI从位图中读取像素?,windows,bitmap,gdi,pixels,Windows,Bitmap,Gdi,Pixels,我已经使用了很多其他技术从文件中读取像素数据,但是尝试使用GDI似乎是个好主意。 文档在非屏幕DCs上有点模糊,所以我有点捉摸不透 这是我现在得到的,它说所有的像素都超出了范围(打印“x”) #包括 #包括 使用名称空间std; #定义文件名“test.bmp” int main() { HBITMAP-hBmp; hBmp=(HBITMAP)LoadImage(NULL,(LPCTSTR)文件名,图像位图,0,0,LR_LOADFROMFILE | LR_共享); 如果(hBmp==NULL)

我已经使用了很多其他技术从文件中读取像素数据,但是尝试使用GDI似乎是个好主意。 文档在非屏幕DCs上有点模糊,所以我有点捉摸不透

这是我现在得到的,它说所有的像素都超出了范围(打印“x”)

#包括
#包括
使用名称空间std;
#定义文件名“test.bmp”
int main()
{
HBITMAP-hBmp;
hBmp=(HBITMAP)LoadImage(NULL,(LPCTSTR)文件名,图像位图,0,0,LR_LOADFROMFILE | LR_共享);
如果(hBmp==NULL)
{

cout您必须为您的dc选择位图:

HBITMAP hOldBmp = SelectObject(hdc, hBmp);

// I haven't understood what you're trying to achieve with this line of code
BitBlt(hdc,0,0,bmp.bmWidth,bmp.bmHeight,hdc,0,0,SRCCOPY);

   ....

SelectObject(hDc, hOldBmp);
DeleteDC(hdc);
   ....
创建内存dc时,默认情况下会选择1x1位图

HBITMAP hOldBmp = SelectObject(hdc, hBmp);

// I haven't understood what you're trying to achieve with this line of code
BitBlt(hdc,0,0,bmp.bmWidth,bmp.bmHeight,hdc,0,0,SRCCOPY);

   ....

SelectObject(hDc, hOldBmp);
DeleteDC(hdc);
   ....