关于Gif图片播放控件的几点说明

GDI+ 图片处理技巧
本文介绍如何使用 GDI+ 处理多种格式图片,包括 GIF、JPEG、PNG 和 BMP,重点讲解如何解决透明 PNG 图片及 GIF 动画图片的显示问题,并给出将控件嵌入 RichEdit 的注意事项。

1、该控件主要作为一个OLE对象嵌入到RichEdit中使用,不仅仅要支持Gif,还要支持jpg、bmp、png等图片格式。

2、要载入各种图片文件到内存中,并将图片绘制到指定区域,要用到GDI+中的Image类。要处理带透明区域的png图片,需要用GDI+来处理。另外,Image类有GetFrameCount函数可获得Gif图片的帧数,并且还有SelectActiveFrame函数来设置当前帧图片,所以对于Gif图片而言,Image类很是方便。

3、将图片文件加载到Image对象中,使用Image::FromStream,而不使用Image::FromFile函数。因为使用Image::FromFile函数,会将磁盘上对应的文件“锁住”,其他地方如果要同时加载该文件则可能会出问题。(使用流加载的示例代码参见:使用GDI+进行图片处理时要注意的问题)

4、将GifAnimatorCtrl嵌入RichEdit中后,发现双击该OLE对象时会出现崩溃的现象,经调试发现是奔溃在IOleObjectImpl::DoVerb()中,所以在我们的控件类中要重新该接口,在接口中直接return,即:

	STDMETHOD(DoVerb)(
		_In_ LONG iVerb, 
		_In_opt_ LPMSG /* pMsg */, 
		_Inout_ IOleClientSite* pActiveSite, 
		_In_ LONG /* lindex */,
		_In_ HWND hwndParent, 
		_In_ LPCRECT lprcPosRect)
	{
		return S_OK;
	}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dvlinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值