在VC上實現如何從記憶體中讀取JPEG、GIF等映像

來源:互聯網
上載者:User
本文來自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+}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.