我的代码大致是这样的:
PBITMAPINFOHEADER bmih;
PBITMAPINFO bmi;得到bmi 和bmi的指针后;if (bmih->biBitCount  > 8)
   lpData = bmih + sizeof(BITMAPINFOHEADER);
else
   lpData = bmih + sizeof(BITMAPINFO);StretchDIBits(hDC, nX, nY, nWidth, nHeight, 0, 0, bmih->biWidth, bmih->biHeight, lpData, bmi, DIB_RGB_COLORS,SRCCOPY);
显示24位的bmp是好的,可是显示8位的BMP时就错位了。

解决方案 »

  1.   

    我的代码大致是这样的:
    PBITMAPINFOHEADER bmih;
    PBITMAPINFO bmi;得到bmi 和bmi的指针后;if (bmih->biBitCount  >= 8) *********(这里改成>=)***********
       lpData = bmih + sizeof(BITMAPINFOHEADER);
    else
       lpData = bmih + sizeof(BITMAPINFO);StretchDIBits(hDC, nX, nY, nWidth, nHeight, 0, 0, bmih->biWidth, bmih->biHeight, lpData, bmi, DIB_RGB_COLORS,SRCCOPY);
    显示24位的bmp是好的,可是显示8位的BMP时就错位了。
      

  2.   


    if (bmih->biBitCount  >8)
       lpData = bmih + sizeof(BITMAPINFOHEADER);
    else
    {
        //别望了还有条色班数据呀1   
        int nClrTable=bmih->biBitCount<<1 ; 
        lpData = bmih + sizeof(BITMAPINFO)+sizeof(RGBQUAD)*nClrTable;
    }
      

  3.   

    8位(包括8位)的bitmap有调色板palette,看看PBITMAPINFO的结构就知道了,你要先建立逻辑调色板再填充PBITMAPINFO才行的
      

  4.   


    if (bmih->biBitCount  >8)
       lpData = bmih + sizeof(BITMAPINFOHEADER);
    else
    {
        //别望了还有条色班数据呀1   
        //不好意思我的代码有误,该为
        int nClrTable=1<<bmih->biBitCount
        lpData = bmih + sizeof(BITMAPINFO)+sizeof(RGBQUAD)*nClrTable;
    }
    //还有其实BITMAPFILEHEADER 里面就有数据的偏移量呀