QQ登录

只需一步,快速开始

146上位机VC MFC使用GDI+加载与显示GIF图片

[ 复制链接 ]

146上位机VC MFC使用GDI+加载与显示GIF图片

146上位机VC MFC使用GDI+加载与显示GIF图片

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()
  1. void CGkbc8Dlg::OnTimer(UINT nIDEvent)
  2. {if (m_pBmp)//已打开GIF图片
  3.         {
  4.                 int nDimCount = m_Bmp->GetFrameDimensionsCount();//获取帧维数
  5.                 GUID *pGuids = new GUID[nDimCount];//获取标识Dimension的GUID
  6.                 m_pBmp->GetFrameDimensionsList(pGuids, nDimCount);
  7.                 //获取第一个Dimension中的图像帧数
  8.                 int  FrameCount = m_pBmp->GetFrameCount(pGuids);
  9.                 UINT nSize = 0;
  10.                 UINT nDelay = PropertyTagFrameDelay;
  11.                
  12.                 m_pBmp->GetPropertySize(&nSize, &nDelay);//先计算属性相关数据的大小
  13.                 PropertyItem *pItem = NULL;
  14.                 pItem = (PropertyItem*)malloc(nSize);
  15.                 m_pBmp->GetAllPropertyItems(nSize, nDelay, pItem);
  16.                 nDelay = ((long*)pItem->value)[m_nFrameIndex];//获取每一帧的时间间隔
  17.                 free(pItem);
  18.                 delete [] pGuids;        
  19.                 //显示图像帧
  20.                 Graphics graphic(GetDC()->m_hDC);
  21.                 graphic.DrawImage(m_pBmp, 0, 0, m_pBmp->GetWidth(), m_pBmp->GetHeight());
  22.                 if (m_nFrameIndex >= FrameCount - 1){m_nFrameIndex = 0;}
  23.                 GUID Guid = FrameDimensionTime;
  24.                 m_pBmp->SelectActiveFrame(&Guid, m_nFrameIndex++);        
  25.         }
  26.         CDialog::OnTimer(nIDEvent);
  27. }
复制代码
  1. 6.实现GIF图片打开的按钮功能
  2. void CGkbc8Dlg::OnOpen()
  3. {
  4.         CFileDialog flDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  5.                                                 "Gif图片|*.gif||");
  6.         if (flDlg.DoModal()==IDOK)
  7.         {
  8.                 CString szFileName = flDlg.GetPathName();
  9.                 SetDlgItemText(IDC_DIREC,szFileName);
  10.                 m_pBmp = Bitmap::FromFile(szFileName.AllocSysString());
  11.                 if (m_pBmp != NULL)
  12.                         m_nFrameIndex = 0;
  13.         }
  14. }
复制代码
我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:146.上位机VC MFC使用GDI 加载与显示GIF图片.rar 
文件大小:1.39 MB  售价:20金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索