HardBirch

在VC上实现如何从内存中读取JPEG、GIF等图像

时间:08-03-18 栏目:安卓入门与提高 作者:张飞不张,文采横飞 评论:4 点击: 2,456 次

首先,本文适合那些由网络传输得到的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+

}

 

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: 在VC上实现如何从内存中读取JPEG、GIF等图像

在VC上实现如何从内存中读取JPEG、GIF等图像:目前有4 条留言

  1. 4楼
    money:

    领教了,谢谢共享!

    2008-05-14 10:09 [回复]
  2. 地板
    itcoco:

    收藏

    2008-09-04 22:53 [回复]
  3. 板凳
    pitpig:

    这个size是什么意思啊?直接用sizeof获取不行吗?

    2011-11-18 11:10 [回复]
  4. 沙发
    miciny:

    用vc++做的,难道这句Graphics mGraphics(GetDC(hwnd));不会报错吗???

    2012-07-30 10:17 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐