BitBlt函数书写失误,应为
BitBlt(dc.m_hDC,rect.left,rect.top,rect.right,rect.bottom,hMemDC,0,0,SRCCOPY);

解决方案 »

  1.   

    换成这样试试:  CBitmap bitmap;
      
    if( bitmap.CreateBitmap(nWidth,nHeight,1,24,pBmpBuff) )
    {  CRect rect;
      GetClientRect(&rect);
      CClientDC dc(this);
      HDC hMemDC = CreateCompatibleDC(dc.m_hDC);
      CBitmap* hOldBitmap;
      if(hMemDC!=NULL)
        hOldBitmap=(CBitmap *)SelectObject(hMemDC,&bitmap );   
    //备注:由于hOldBitmap返回NULL,绘图失败??
    BitBlt (dc.m_hDC,rect.left,rect.top,rect.right,rect.bottom,hMemDC,0,0,SRCCOPY);
      if (hOldBitmap!=NULL)  SelectObject(hMemDC,hOldBitmap);
      if(hMemDC!=NULL)  DeleteObject(hMemDC);
      bitmap.DeleteObject();
    }
      

  2.   

    纯位图数据(24 bits)
    ~~~~~~~~~
    是什么数据,有没有FileHeader,有没有BMPInfoHeader
    没有InfoHeader的话,HBITMAP不能指向它
    有FileHeader的话,HBITMAP也不能指向它
      

  3.   

    纯位图数据没有包含 BITMAPINFOHEADER 和 BITMAPFILEHEADER。
      

  4.   

    纯位图数据没有包含 BITMAPINFOHEADER 和 BITMAPFILEHEADER。
      

  5.   

    用函数Setdibitstodevice或StretchDibits可以但要自己构造一个BITMAPINFOHEADER就可以了,很简单,查查MSDN,StretchDibits可以在画图像数据到DC上是进行缩放而Setdibitstodevice不可以。
      

  6.   

    StretchDIBits和SetDIBitsToDevice可以将指定的图像数据(不包括BITMAPINFOHEADER 和 BITMAPFILEHEADER)直接画到指定的DC上,前者可以缩放而后者只能1:1的进行。使用时要自己构造一个与图像数据对应的BITMAPINFOHEADER ,具体见MSDN,其实非常简单。
      

  7.   

    没有InfoHeader,那有没有 width, height, bpp等数据,没有的话就干不了
      

  8.   

    Sorry,没看到你已经建好了CBitmap
    你用不着 SelectObject()返回值
    hOldBitmap=(CBitmap *)SelectObject(hMemDC,&bitmap );   
    因为你的 DC中原来没有 HBITMAP, 所以返回 NULL
    不要返回值,也别选回去
    该成:
    SelectObject(hMemDC,&bitmap );   
    BitBlt (dc.m_hDC,rect.left,rect.top,rect.right,rect.bottom,hMemDC,0,0,SRCCOPY);
      

  9.   

    hai shi kan yi xia ba