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;
}
GDI+ 图片处理技巧

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

被折叠的 条评论
为什么被折叠?



