CDC* pdc=GetDC();
CDC dcmem;
dcmem.CreateCompatibleDC(pdc);
CBitmap MemBitmap;
MemBitmap.CreateCompatibleBitmap(pdc,500,200);
    
CBitmap *pOldBit=dcmem.SelectObject(&MemBitmap); for(int j=0;j<200;j++)
for(int i=0;i<=500;i++)
{
dcmem.SetPixel(i,j,0xFF);
}

//pdc->BitBlt( 0,0,x,y,&dcmem,0,0,SRCCOPY);

HDRAWDIB hdib=::DrawDibOpen(); BITMAPINFO bminfo;
BITMAP bitmap;

ZeroMemory(&bminfo,sizeof(BITMAPINFO)); GetObject(MemBitmap.m_hObject ,sizeof(BITMAP),&bitmap); bminfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bminfo.bmiHeader.biWidth=bitmap.bmWidth;
bminfo.bmiHeader.biHeight=bitmap.bmHeight;
bminfo.bmiHeader.biPlanes=bitmap.bmPlanes;
bminfo.bmiHeader.biBitCount=bitmap.bmBitsPixel;
bminfo.bmiHeader.biCompression=BI_RGB; DrawDibDraw(hdib,::GetDC(m_hWnd),0,0,-1,-1,&(bminfo.bmiHeader),
bitmap.bmBits,0,0,bitmap.bmWidth,bitmap.bmHeight,
DDF_SAME_HDC); ::DrawDibEnd(hdib);
::DrawDibClose(hdib);
这里暂且把绘制图像简化为绘制方块。可为什么没显示出来呢?怎么办呀
好几天没弄出个结果来,郁闷之极

解决方案 »

  1.   

    用GetObject获取BITMAP时不会获取其中的bmBits(即使获取了你这里也不能用,因为DIB和DDB的数据格式是有差别的,BITMAP是用来描述DDB的,而你要DrawDib,显然传进去的数据必须是DIB)。要想获得一个Bitmap的数据部分,需使用GetDIBits或者GetBitmapBits。
      

  2.   

    BOOL DrawDibBegin(
      HDRAWDIB hdd,             
      HDC hdc,                  
      int dxDest,               
      int dyDest,               
      LPBITMAPINFOHEADER lpbi,  
      int dxSrc,                
      int dySrc,                
      UINT wFlags               
    );你用一下这个方法
      

  3.   

    CDC* pdc;
    char * buffer=new char[704*576*3];
    int width=496;
    int height=344;    BITMAPINFO bminfo; ZeroMemory(&bminfo,sizeof(BITMAPINFO));    bminfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
        bminfo.bmiHeader.biWidth=width;
        bminfo.bmiHeader.biHeight=height;
        bminfo.bmiHeader.biPlanes=1;
        bminfo.bmiHeader.biBitCount=24;
        bminfo.bmiHeader.biCompression=BI_RGB;
    /////file
    FILE * fp;
    fp=fopen("Signal.bmp","r");
    fseek(fp,sizeof(bminfo.bmiHeader),SEEK_SET);

    fread(buffer,1,width*height*3,fp);
    /////
    HWND m_hwnd=this->m_hWnd;
    pdc=this->GetDC();
    //HDC hdc=::GetDC(pdc);
    HDRAWDIB hdib=::DrawDibOpen();
    BOOL ret=DrawDibBegin(hdib,pdc->m_hDC,width,height,&(bminfo.bmiHeader),width,height,DDF_ANIMATE);  ret=DrawDibDraw(hdib,pdc->m_hDC,0,0,width,height,&(bminfo.bmiHeader),buffer,0,0,width,height,DDF_SAME_HDC);
    Sleep(1);
        ::DrawDibEnd(hdib);
        ::DrawDibClose(hdib);
    找一张RGB 位深度为24的BMP图片就行了
    就能画到窗体上了
      

  4.   

    Up一下,看看有没有其他的回答。
    楼上的可以,但是功能变了,我自己改了改,就显示不出来了。那我要显示dcmem里的图片,该怎么弄呢?