none
如何把这个图片数据显示出来? RRS feed

  • 问题

  •  long length  = sizeof(tagBITMAPFILEHEADER );
     length   += sizeof(tagBITMAPINFOHEADER);
     length+=size;
     char * dateStream = new char[length];
     ::memcpy(dateStream , &bfh, sizeof(BITMAPFILEHEADER));
     ::memcpy(dateStream+ sizeof(BITMAPFILEHEADER) , &bih, sizeof(tagBITMAPINFOHEADER));
     ::memcpy(dateStream+sizeof(BITMAPFILEHEADER)+sizeof(tagBITMAPINFOHEADER),lpData,size);

    以上是把文件头和图片的数据存入了dateStream,
    那么我怎么把它显示在界面上呢?当然是显示图片了,画出来。

    注意,不要先保存成图片文件再显示,而是直接显示

    能否给个现成的代码?
    2009年5月22日 3:45

答案

  • 你先用你的数据填一个BITMAP结构,再调用CreateBitmapIndirect,然后获取了HBITMAP,用SelectObject到一个CreateCompatibleDC 创建的DC再调用BitBlt到显示DC上就可以显示出来了.

    BITMAP bm;
    bm.....(用BITMAPINFOHEADER填)
    其中有一个数据指针
    bm.bmBits = (LPVOID)dateStream;
    HBITMAP hBitmap = ::CreateBitmapIndirect(&bm);
    HDC hDesktop = ::GetDC(::GetDesktopWindow());
    HDC hDC = ::CreateCompatibleDC(hDesktop);
    ::SelectObject(hDC, hBitmap);
    ::BitBlt(你的显示DC,参数,hDC,参数, SRCCOPY);
    ::ReleaseDC(......);
    ::DeleteDC(......);
    ::DeleteObject(......);


    Hello world
    2009年5月22日 4:17
    版主

全部回复

  • 你先用你的数据填一个BITMAP结构,再调用CreateBitmapIndirect,然后获取了HBITMAP,用SelectObject到一个CreateCompatibleDC 创建的DC再调用BitBlt到显示DC上就可以显示出来了.

    BITMAP bm;
    bm.....(用BITMAPINFOHEADER填)
    其中有一个数据指针
    bm.bmBits = (LPVOID)dateStream;
    HBITMAP hBitmap = ::CreateBitmapIndirect(&bm);
    HDC hDesktop = ::GetDC(::GetDesktopWindow());
    HDC hDC = ::CreateCompatibleDC(hDesktop);
    ::SelectObject(hDC, hBitmap);
    ::BitBlt(你的显示DC,参数,hDC,参数, SRCCOPY);
    ::ReleaseDC(......);
    ::DeleteDC(......);
    ::DeleteObject(......);


    Hello world
    2009年5月22日 4:17
    版主
  • 谢谢,我试试
    2009年5月22日 7:37