本文來自http://blog.csdn.net/hellogv/
首先,本文適合那些由網路傳輸得到的JPEG、GIF映像顯示,因為這些映像都是以“BYTE數組”這種形式傳輸。 直接給出函數,不說廢話了!//-----------以下兩句放在標頭檔定義的地方#include "Gdiplus.h"using namespace Gdiplus; //-----------以下代碼修改一下變數為自己的變數,即刻使用 void Readfrombuffer(char* video_data,int size){ GdiplusStartupInput m_gdiPlusInPut; ULONG_PTR m_gdiPlusToken; GdiplusStartup( &m_gdiPlusToken, &m_gdiPlusInPut, NULL ); //初始化GDI+ IPicture *pPic;IStream *pStm ; //分配全域儲存空間 HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,size);LPVOID pvData=NULL ;//鎖定分配記憶體塊 pvData=GlobalLock(hGlobal);//複製資料包video_data到pvDatamemcpy(pvData,video_data,size);GlobalUnlock(hGlobal);CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);ULARGE_INTEGER pSeek; LARGE_INTEGER dlibMove ={ 0 } ; pStm->Seek(dlibMove,STREAM_SEEK_SET ,&pSeek); Sleep(15);//裝入圖形檔案if(FAILED(OleLoadPicture(pStm,size,TRUE,IID_IPicture,(LPVOID*)&pPic))){//附:如果video_data這個數組包含的映像有錯,則OleLoadPicture 容易產生讀寫記憶體錯誤pPic->Release();pStm->Release();return ;}Image img(pStm,0);Graphics mGraphics(GetDC(hwnd));mGraphics.DrawImage(&img, 0, 0, Video_Width, Video_Height);img.~Image();//會出錯mGraphics.~Graphics();pPic->Release();pStm->Release(); GdiplusShutdown(m_gdiPlusToken); //銷毀GDI+}