程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 在VC上實現如何從內存中讀取JPEG、GIF等圖像

在VC上實現如何從內存中讀取JPEG、GIF等圖像

編輯:vc教程

首先,本文適合那些由網絡傳輸得到的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到pvData
memcpy(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+
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved