CDC dc;
BYTE *buffer=NULL;
dc.CreateCompatibleDC(NULL);
BITMAPINFO bitmapinfo={0};
bitmapinfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bitmapinfo.bmiHeader.biWidth=40;
bitmapinfo.bmiHeader.biHeight=40;
bitmapinfo.bmiHeader.biPlanes=1;
bitmapinfo.bmiHeader.biBitCount=24;HBITMAP bitmap=CreateDIBSection(dc,&bitmapinfo,DIB_RGB_COLORS,(LPVOID *)&buffer,NULL,0);我用CreateDIBSection创建出一张位图,DEBUG时发现,buffer指向的首地址为空,如果我想向buffer所指空间填充数据,应该怎样做呢?
比如在这张图上画图,可是buffer指向仍然是空.dc.SelectObject(bitmap);
CPen pen(PS_SOLID,5,RGB(255,0,0));
dc.SelectObject(&pen);
dc.MoveTo(5,5);
dc.LineTo(35,35);
dc.MoveTo(35,5);
dc.LineTo(5,35);
pen.DeleteObject();

解决方案 »

  1.   

    buffer指向的首地址为空不代表没有内容啊,难道buffer==NULL
      

  2.   

    你是用ddraw读图吧?DX有完整的读取图片的函数,LoadBmpTexture24Bit (name,ppTexture,picW,picH);你可以试试,里面可以访问像素.
      

  3.   

    只要调用函数返回的bitmap不是0,buffer就是有效的指针,可以直接向buffer中写数据。
      

  4.   

    如果buffer!=NULL的话直接对它进行数据拷贝就可以,如果buffer==NULL的话就监测一下CreateDIBSection是否正确执行了,这种情况下有可能CreateDIBSection失败了
      

  5.   

    dc.SelectObject(bitmap); 
    CPen pen(PS_SOLID,5,RGB(255,0,0)); 
    dc.SelectObject(&pen); 
    dc.MoveTo(5,5); 
    dc.LineTo(35,35); 
    dc.MoveTo(35,5); 
    dc.LineTo(5,35); 
    pen.DeleteObject(); 
    楼主是不是要把你这段代码的绘图保存成BMP啊?
    如果这样的话可以参考这个帖子:
    http://topic.csdn.net/u/20081121/16/272c08e1-fecf-455c-9499-429f1cd94223.html如果非要用CreateDIBSection的话请参考:
    http://www.vckbase.com/document/viewdoc/?id=674#A1
    上面这个有源代码的 去看看他是怎么用CreateDIBSection的。