VS2010 使用GDI+创建显示GIF的MFC程序

配置VS2010 GDI+环境
http://www.hacktea8.com/read.php?tid-1489.html
配置好看下面:
创建CMemeryDC类从DC类派生
部分代码如下:
#include "StdAfx.h"
#include "MemDC.h"


CMemeryDC::CMemeryDC(CDC* pDC,const CRect& rect)
{
//创建一个兼容的设备上下文
CreateCompatibleDC(pDC);
//为位图对象分配空间
m_bmp=new CBitmap();
//创建位图对象
m_bmp->CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
//选中创建的位图
m_Oldbmp=SelectObject(m_bmp);
//设置成员变量
m_pDC=pDC;
//设置区域对象
m_Rect=rect;
//绘制白色背景
this->BitBlt(0,0,m_Rect.Width(),m_Rect.Height(),m_pDC,m_Rect.left,m_Rect.top,WHITENESS);
}


CMemeryDC::~CMemeryDC()
{
//绘制图形
m_pDC->BitBlt(m_Rect.left,m_Rect.top,m_Rect.Width(),m_Rect.Height(),this,0,0,SRCCOPY);
//选中原来的位图对象
SelectObject(m_Oldbmp);
//判断位图对象是否为空
if(m_bmp!=NULL){
delete m_bmp;
}
//释放设备上下文
DeleteObject(this);
}

写打开文件对话框的函数
部分代码如下:
CFileDialog flDlg(true,"","",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"GIF|*.gif;||");
if(flDlg.DoModal()==IDOK){
CString szText;
szText=flDlg.GetPathName();
m_FileName.SetWindowTextA(szText);
//加载GIF图像 CString 对象的 AllocSysString 方法将 CString 转化成 BSTR
m_pBmp=Bitmap::FromFile(szText.AllocSysString());
//释放资源
szText.ReleaseBuffer();
//获取帧维数
m_nCount=m_pBmp->GetFrameDimensionsCount();
//定义一个GUID对象
GUID *pGuids=new GUID[m_nCount];
//获取图像帧的GUID
m_pBmp->GetFrameDimensionsList(pGuids,m_nCount);
//获取GIF帧数
m_FrameCount=m_pBmp->GetFrameCount(pGuids);
//定义一个整型变量
UINT nSize=0;
//初始化成员变量
m_nCount=0;
//获取属性的值
m_pBmp->GetPropertySize(&nSize,&m_nDelay);
//定义属性指针
PropertyItem *pItem=NULL;
//为属性指针分配合适的空间
pItem=(PropertyItem*)malloc(nSize);
//获取属性信息
m_pBmp->GetAllPropertyItems(nSize,m_nDelay,pItem);
//获取第一帧的延时
m_nDelay=((long*)pItem->value)[0];
//释放属性对象
free(pItem);
//释放GUID
delete[] pGuids;
m_nIndex=0;
KillTimer(1);
SetTimer(1,300,NULL);
}
源代码如下:
OutputGif

原文出处:http://www.hacktea8.com/read.php?tid-1491-ds-1.html

posted @ 2013-01-26 13:16  编程狂热者  阅读(511)  评论(0编辑  收藏  举报