int dc_h = 32;
int dc_w = 32; BITMAPINFO* pbi = new BITMAPINFO;
memset(pbi,0,sizeof(BITMAPINFO));
pbi->bmiHeader.biBitCount = 8;
pbi->bmiHeader.biCompression = BI_RGB;
pbi->bmiHeader.biHeight = dc_h;
pbi->bmiHeader.biPlanes = 1;
pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pbi->bmiHeader.biSizeImage = 0;
pbi->bmiHeader.biWidth = dc_w;
pbi->bmiHeader.biXPelsPerMeter = 0;
pbi->bmiHeader.biYPelsPerMeter = 0; for (int ii = 0; ii < 256;ii++)
{
pbi->bmiColors[ii].rgbBlue = ii;
pbi->bmiColors[ii].rgbGreen= ii;
pbi->bmiColors[ii].rgbRed = ii;
pbi->bmiColors[ii].rgbReserved = 0;
} BYTE* lpBits;
HDC memhdc = CreateCompatibleDC(pdc->GetSafeHdc());
HBITMAP hBitmap=::CreateDIBSection(NULL,pbi,DIB_RGB_COLORS,(void**)&lpBits,NULL,0);
ASSERT(hBitmap!=NULL);
//  BYTE* pdata = new BYTE[dc_h*dc_w];
//  memset(pdata,0,dc_w*dc_h);
//  SetDIBitsToDevice(pdc->GetSafeHdc(),0,0,dc_w,dc_h,0,0,0,dc_h,pdata,pbi,DIB_RGB_COLORS); delete pbi;
//delete [] pdata; return;
CreateDIBSection函数总是错误码8

解决方案 »

  1.   

    解决方案
     http://apps.hi.baidu.com/share/detail/32960697
      

  2.   


    我用的就是createdibsection啊
      

  3.   

    就是在CreateDIBSection执行之后getlasterror得到错误码8
      

  4.   

    pbi-> bmiHeader.biSizeImage   =   0; 
    不对吧
    参考这个
    http://topic.csdn.net/u/20100913/11/bcfceb93-87ae-41f8-b09b-bbdc6afcbc60.html
      

  5.   


    也不是
    0或者dc_h*dc_w都不好使啊 dc_w我已经对齐了
      

  6.   

    这个程序你改动下面的几个地方就行了:
    pbi-> bmiHeader.biSize   =   sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);pbi-> bmiHeader.biXPelsPerMeter   =   GetDeviceCaps(hdc,HORZRES)/GetDeviceCaps(hdc,HORZSIZE)*1000; 
    pbi-> bmiHeader.biYPelsPerMeter   =   GetDeviceCaps(hdc,VERTRES)/GetDeviceCaps(hdc,VERTSIZE)*1000;HBITMAP   hBitmap=::CreateDIBSection(NULL,pbi,DIB_PAL_COLORS,(void**)&lpBits,NULL,0); 程序应该不会再出错了....
      

  7.   

    你创建的是一个8位的位图,这个是需要调色板的,你开头的一句也有错误BITMAPINFO*   pbi   = (BITMAPINFO*)malloc(sizeof(BITMAPINFOHEADER)+255*sizeof(RGBQUAD));