工控编程吧
标题:
146上位机VC MFC使用GDI+加载与显示GIF图片
[打印本页]
作者:
qq263946146
时间:
2016-1-6 21:53
标题:
146上位机VC MFC使用GDI+加载与显示GIF图片
(, 下载次数: 3)
上传
点击文件名下载附件
146上位机VC MFC使用GDI+加载与显示GIF图片
功能展示
GIF动态图片也是我们电脑上常见的图片格式,VC并没有提供直接打开图片的函数,我们当前例程通过GDI+实现GIF图片的打开与显示,效果如图
要点提示
通过微软的GDI+能够快速轻松实现 打开GIF格式图片并将其以动画的形式显示;
GDI+使用前,得下载微软的GDIPLUS支持包,可从微软的管网下载,我们这里给大家进行了打包;
然后是添加头文件再进行简单的初始化操作,在CWinApp派生类的InitInstance函数中进行此项工作是最好的;
实现功能
1.新建基于对话框的应用程序
2.使用前准备GDI+:将例程根目录Include文件夹复制到自己工程根目录。
在StdAfx.h头文件包含GDI+ 头文件及库文件//使用GDI+第一步
#define UNICODE
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#endif
#include "Include/gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib, "Include/gdiplus.lib")
在APP类的InitInstance()中进行初始化
//使用GDI+第二步
GdiplusStartupInputgdiplusStartupInput; ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken,&gdiplusStartupInput, NULL);
在程序退出时 进行GDI+ 环境的关闭
//使用GDI+第三步 GdiplusShutdown(gdiplusToken); //关闭gdiplus的环境
3,准备好GDI+后,便是使用GDI+ 加载GIF图片:
拖拽一按钮控件关联函数用于打开GIF图片,拖拽一静态文本控件,修改默认ID为IDC_DIREC,用于显示GIF图片路径;
4.添加两变量private: Bitmap* m_pBmp; //定义位图对象 intm_nFrameIndex; //记录当前显示帧索引
在OnInitDialog()函数中初始化 及设定一定时器;m_pBmp = NULL; SetTimer(1, 20, NULL); //开始一个计时器
5.添加定时器响应函数OnTimer()
void CGkbc8Dlg::OnTimer(UINT nIDEvent)
{if (m_pBmp)//已打开GIF图片
{
int nDimCount = m_Bmp->GetFrameDimensionsCount();//获取帧维数
GUID *pGuids = new GUID[nDimCount];//获取标识Dimension的GUID
m_pBmp->GetFrameDimensionsList(pGuids, nDimCount);
//获取第一个Dimension中的图像帧数
int FrameCount = m_pBmp->GetFrameCount(pGuids);
UINT nSize = 0;
UINT nDelay = PropertyTagFrameDelay;
m_pBmp->GetPropertySize(&nSize, &nDelay);//先计算属性相关数据的大小
PropertyItem *pItem = NULL;
pItem = (PropertyItem*)malloc(nSize);
m_pBmp->GetAllPropertyItems(nSize, nDelay, pItem);
nDelay = ((long*)pItem->value)[m_nFrameIndex];//获取每一帧的时间间隔
free(pItem);
delete [] pGuids;
//显示图像帧
Graphics graphic(GetDC()->m_hDC);
graphic.DrawImage(m_pBmp, 0, 0, m_pBmp->GetWidth(), m_pBmp->GetHeight());
if (m_nFrameIndex >= FrameCount - 1){m_nFrameIndex = 0;}
GUID Guid = FrameDimensionTime;
m_pBmp->SelectActiveFrame(&Guid, m_nFrameIndex++);
}
CDialog::OnTimer(nIDEvent);
}
复制代码
6.实现GIF图片打开的按钮功能
void CGkbc8Dlg::OnOpen()
{
CFileDialog flDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Gif图片|*.gif||");
if (flDlg.DoModal()==IDOK)
{
CString szFileName = flDlg.GetPathName();
SetDlgItemText(IDC_DIREC,szFileName);
m_pBmp = Bitmap::FromFile(szFileName.AllocSysString());
if (m_pBmp != NULL)
m_nFrameIndex = 0;
}
}
复制代码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/209a072a484c40128ac66e3a76edb5c1/0/0/w_19rtdoyq6p.swf-albumId=5145219709-tvId=5145219709-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4