大家看清楚了,我的情况是这样的,别人把一个位图文件用数据流的形式传给我,我接到的就是一串数据,现在我要把它显示出来,怎么做?具体用什么函数啊,??我新学的,就知道两个函数LoadBitmap(), LoadImage(),这里看样子都用不上了,大家指点一下啊!

解决方案 »

  1.   

    看看BMP文件的格式,活着那用MFC的CDC,好像有能直接显示BITMAP数据流的,我也记不太清了。你查一下MSDN
      

  2.   

    DIB的显示呀。用SetDIBsToDevice。
      

  3.   

    一行就可以了。自己看msdn吧。
      

  4.   

    仔细看一定对有用
    void Cmfc对话框Dlg::OnBnClickedButton3()
     {
            CImage mmage;
     HWND hWnd = ::GetDesktopWindow();//获得屏幕的HWND.
     HDC hScreenDC = ::GetDC(hWnd);   //获得屏幕的HDC.
     HDC MemDC = ::CreateCompatibleDC(hScreenDC);
     RECT rect; 
        
     ::GetWindowRect(hWnd,&rect);
     
     HBITMAP hBitmap = ::CreateCompatibleBitmap(hScreenDC,rect.right,rect.bottom);
     HGDIOBJ hOldBMP = ::SelectObject(MemDC,hBitmap);
     ::BitBlt(MemDC,0,0,rect.right,rect.bottom,hScreenDC,rect.left,rect.top,SRCCOPY);
     hBitmap=(HBITMAP)::SelectObject(MemDC,hOldBMP);
     
     mmage.Attach(hBitmap);
     IStream* pStmImage = NULL;
        
     HGLOBAL hMemBmp = GlobalAlloc(GMEM_MOVEABLE,0);//可移动的缓冲区
     if (hMemBmp == NULL) return;
     CreateStreamOnHGlobal(hMemBmp, FALSE, &pStmImage);//将内存区B作为流的起始
     if (pStmImage == NULL)       {
                  GlobalFree(hMemBmp);
                  MessageBox(L"为空");
         return ;
           }
     mmage.Save(pStmImage,ImageFormatJPEG); BYTE* pbyBmp = (BYTE *)GlobalLock(hMemBmp);//得到缓冲区的起始地址
     
     CFile mfile(L"234.jpg",CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
     GlobalUnlock(hMemBmp);
     mfile.Write(pbyBmp,GlobalSize(hMemBmp));
     mfile.Close();
    pStmImage->Release();
    GlobalFree(hMemBmp);
    if(mmage)
    mmage.Destroy();
    ::DeleteObject(MemDC);
    ::ReleaseDC(hWnd,hScreenDC);}