BITMAPFILEHEADER bii;
BITMAPINFO binn;
CFile openfile(filepath,CFile::modeRead);
openfile.Read(&bii,sizeof(BITMAPFILEHEADER));
openfile.Read(&binn,sizeof(BITMAPINFOHEADER));
LPBYTE Dib;
Dib = (LPBYTE)&binn + sizeof(BITMAPINFOHEADER);
//Dib = Dib + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
StretchDIBits(dc->GetSafeHdc(),rect.left,rect.top,rect.Width(),rect.Height(),100,100,((LPBITMAPINFOHEADER)Dib)->biWidth,((LPBITMAPINFOHEADER)Dib)->biHeight,Dib,(LPBITMAPINFO)Dib,DIB_RGB_COLORS,SRCCOPY);其他地方的代码绝对没有问题,这里想显示,运行完说什么就是没有任何显示,请问我哪里出错了啊?

解决方案 »

  1.   

    补充:因为是真彩色,没有用颜色表,所以BITMAPINFO那里只是读出了BITMAPINFOHEADER部分
      

  2.   

    我如果用Dib = (LPBYTE)&binn + sizeof(BITMAPINFOHEADER);指针指到数据位置不行么?那个字段不就是要求的只想位图数据的指针么?
      

  3.   

    更改了一下  还是不显示啊
    BITMAPFILEHEADER bii;
    BITMAPINFO binn;
    CFile openfile(filepath,CFile::modeRead);
    openfile.Read(&bii,sizeof(BITMAPFILEHEADER));
    openfile.Read(&binn,sizeof(BITMAPINFOHEADER));

    int length = binn.bmiHeader.biSizeImage;
    BYTE* arr = new BYTE[length];

    int x = openfile.Read(arr,length);
    StretchDIBits(dc->GetSafeHdc(),rect.left,rect.top,rect.Width(),rect.Height(),0,0,100,-100,arr,&binn,DIB_RGB_COLORS,SRCCOPY);
                delete []arr;
    openfile.Close();
      

  4.   

    可以显示啊:
             
    BITMAPFILEHEADER bii;
    BITMAPINFO binn;
    CFile openfile("K://11.bmp",CFile::modeRead);
    openfile.Read(&bii,sizeof(BITMAPFILEHEADER));
    openfile.Read(&binn,sizeof(BITMAPINFOHEADER));int length = binn.bmiHeader.biSizeImage;
    BYTE* arr = new BYTE[length];
    int x = openfile.Read(arr,length);

    StretchDIBits(pDC->GetSafeHdc(),0,0,600,800,0,0,binn.bmiHeader.biWidth,
    binn.bmiHeader.biHeight,arr,(LPBITMAPINFO)&binn,DIB_RGB_COLORS,SRCCOPY);delete []arr;
    openfile.Close();
      

  5.   

    没用过这个函数,但即然是BMP,可以用LoadImage()直接装入文件,不用你自己去读。HBITMAP bitmap=(HBITMAP)LoadImage(NULL,_T("c:\\test.BMP"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    CBitmap bmp;
    bmp.Attach(bitmap))
    CDC dcMemory;
    CDC* pDC=GetDC();
    dcMemory.CreateCompatibleDC(pDC);
    dcMemory.SelectObject(&bmp);
    pDC->BitBlt(0,0,720,576,&dcMemory,0,0,SRCCOPY);
    ReleaseDC(pDC);
      

  6.   

    问题已经解决,感谢大家的热心帮助,Mackz(在相互)的建议不错,qqwwing(草莓猪)的建议也可以,不过这样load出来的应该是和设备相关的DDB吧,我想要设备无关的!同样非常感谢你,和其他几位指点人!