在头文件里面添加:

Image* image;
GUID Guid ;
UINT frameCount;
UINT framePos;
ULONG_PTR gdiplusToken; afx_msg void OnTimer(UINT_PTR nIDEvent);
void LoadGif();

需要依赖头文件:

#include <Gdiplusheaders.h>
#include <Gdiplus.h> using namespace Gdiplus;

界面类的构造函数里面添加:

//启动gdi 要不然 Image::FromFile 会失败
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); image = NULL;
frameCount = ;
framePos = ;

添加定时器消息处理:

BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplication1Dlg::OnBnClickedButton1)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplication1Dlg::OnBnClickedButton2)
END_MESSAGE_MAP()

加载GIF文件:

void CMFCApplication1Dlg::LoadGif()
{
WCHAR strModule[MAX_PATH * ] = { };
GetModuleFileNameW(NULL, strModule, MAX_PATH * );
::PathRemoveFileSpecW(strModule);
wsprintfW(strModule + wcslen(strModule), L"\\%s.gif", L"sVcodec"); image = Image::FromFile(strModule); //获得有多少个维度,对于gif就一个维度
UINT count = image->GetFrameDimensionsCount();
GUID *pDimensionIDs = (GUID*)new GUID[count];
image->GetFrameDimensionsList(pDimensionIDs, count);
WCHAR strGuid[];
StringFromGUID2(pDimensionIDs[], strGuid, );
frameCount = image->GetFrameCount(&pDimensionIDs[]); //delete[] pDimensionIDs; //获得各帧之间的时间间隔
//先获得有多少个时间间隔,PropertyTagFrameDelay是GDI+中预定义的一个GIG属性ID值,表示标签帧数据的延迟时间
UINT FrameDelayNums = image->GetPropertyItemSize(PropertyTagFrameDelay);
PropertyItem* lpPropertyItem = new PropertyItem[FrameDelayNums];
image->GetPropertyItem(PropertyTagFrameDelay, FrameDelayNums, lpPropertyItem); Guid = FrameDimensionTime;
image->SelectActiveFrame(&Guid, framePos); }

定时器处理:

void CMFCApplication1Dlg::OnTimer(UINT_PTR nIDEvent)
{
if (image)
{
CWnd* pic = GetDlgItem(IDC_STATIC_PIC);
Graphics gh(pic->GetDC()->m_hDC); CRect rect;
GetDlgItem(IDC_STATIC_PIC)->GetClientRect(&rect);
gh.DrawImage(image, , , rect.Width(), rect.Height());
//gh.DrawImage(image, 0, 0, image->GetWidth(), image->GetHeight()); //设置当前需要显示的帧数
image->SelectActiveFrame(&Guid, framePos);
framePos++;
if (framePos == frameCount)
{
framePos = ;
}
} CDialogEx::OnTimer(nIDEvent);
}

启动定时器:

SetTimer(, , NULL);

    LoadGif();

需要依赖gdi 库:

gdiplus.lib

参考地址:https://blog.csdn.net/sz76211822/article/details/51507616

================================================================

VC2010使用GDI+在picture control控件里面显示图片

一、头文件添加

在项目的stdafx.h头文件里面添加如下头文件说明。

#include <gdiplus.h>    // GDI+库头文件,并在App头文件中声明相关变量
using namespace Gdiplus;

二、lib文件添加

项目-xx属性-链接器-输入-附加依赖性:输入gdiplus.lib

三、App文件对使用GDI+的初始化

xx.h头文件定义:ULONG_PTR m_gdiplusToken;

xx.cpp中在

BOOL CXXApp::InitInstance()

{

      //添加GDI+初始化说明

      // GDI+相关启动操作

      GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL); }

四、打开图片操作函数

bool XX::ShowImageInBoxEC(CString pathname)
{
CWnd* pic = GetDlgItem(IDC_PIC_VIEW);    // 用此句,得到图片控件的CWnd,图片将被绘制在控件上,IDC_PIC_VIEW为picture control的控件ID
Graphics graphics(pic->GetDC()->m_hDC); Image tempimage(pathname);
CRect rect;
GetDlgItem(IDC_PIC_VIEW)->GetClientRect(&rect); graphics.DrawImage(&tempimage, , , rect.Width(), rect.Height()); return TRUE;
}

参考:https://blog.csdn.net/fengdingha/article/details/19479289

MFC GDI+显示GIF文件《转》的更多相关文章

  1. 使用GDI+显示OpenCV中的图像IplImage

    OpenCV虽然自带了轻量级的界面库HighGUI,但是支持的图像化元素实在是太少了,一般只在前期算法测试时使用.实际产品还是使用MFC库.因此本文记录了如何在GDI+中显示OpenCV中的IplIm ...

  2. MFC对话框显示BMP图片

    1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...

  3. MFC【6】文件I/O和串行化

    文件输入和输出(I/O)服务是所有操作系统的主要工作.Microsoft Windows提供了各种API函数用来读.写和操作磁盘文件.MFC将这些桉树和CFile类融合在面对对象的模型里.其中CFil ...

  4. EasyPlayerPro Windows播放器全屏模式下GDI显示出现黑屏问题解决

    问题来源 2017.12.21 前天有杭州某教育领域客户反馈有部分视频源在全屏模式下显示黑屏: 问题复现 EasyPlayerPro由于没有实现单个窗口完全全屏,故没有暴露该问题,晚上加班,加上单个窗 ...

  5. MFC上显示摄像头JPEG图片数据的两种方法

    其一是借助opencv,其二是利用流对象. 方法一: CvMat *mat; ,,CV_8UC1); ,,CV_8UC1,JPEGBuf); /*初始化矩阵信息头,这里的JPEGBuf就是JPEG图像 ...

  6. 利用FlashPaper在web页面中显示PDF文件(兼容各浏览器)

    应项目需求要把PDF内嵌到网页中显示,其中有了很多办法,比如用<embed/>元素放入PDF文件,但是效果不理想,浏览器兼容不理想,在ie9/8(其他版本没有测试)显示会提示下载pdf文件 ...

  7. HTML input="file" 浏览时只显示指定文件类型 xls、xlsx、csv

    html input="file" 浏览时只显示指定文件类型 xls.xlsx.csv <input id="fileSelect" type=" ...

  8. linux 如何显示一个文件的某几行(中间几行)

    linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...

  9. 转: Eclipse 分屏显示同一个文件

    Eclipse 分屏显示同一个文件   场景 : 某个类很大,可能有数千行.当你想要将类开头部分与中间或者靠后的部分进行对比时,请follow如下步骤: Window -> Editor -&g ...

随机推荐

  1. @JsonIgnore注解

    注解名称:@JsonIgnore 作用:在实体类向前台返回数据时用来忽略不想传递给前台的属性或接口. Eg:User实体中会有字段password字段,当返回用户信息给前台的时候,当然是不希望将pas ...

  2. Flask之flask-sqlalchemy

    接下来基于这个Flask项目,我们要加入Flask-SQLAlchemy让项目变得生动起来 1.加入Flask-SQLAlchemy第三方组件 from flask import Flask # 导入 ...

  3. ab接口压力测试工具使用

    ab的使用 模拟并发请求100次,总共请求10000次 命令模板: ab -c 100 -n 10000 待测试网站(建议完整路径) 内容解释: Server Software: nginx/1.10 ...

  4. 基于STM8的IIC协议--实例篇--时钟模块(DS3231)读取

    1. 综述 由上篇博客可知道IIC协议如何用代码实现,本篇博客就不涉及协议内容,只讲解如何使用. 本次的实验传感为:DS3231(时钟模块),对于时钟模块的具体信息我也就不多介绍,大家可以自行度娘,具 ...

  5. Jmeter 中正则表达式提取器Regular Expression Extractor

    正则表达式提取器点击后置处理器中Post Processors 中的正则表达式提取器 Regular Expression Extractor Appy to: 表示作用于哪一个请求Main samp ...

  6. SpringBoot -基础学习笔记 - 01

    SpringBoot个人笔记-szs 一.使用thymeleaf模板引擎来指定所需资源的位置 可以做到当项目名进行更改后,模板引擎也会进行更新相关的路径;如下图展示,会自动添加crud根目录! < ...

  7. P1072 Hankson 的趣味题[数论]

    题目描述 Hanks 博士是 BT(Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲解了 ...

  8. 《hello-world》第九次团队作业:【Beta】Scrum meeting 3

    项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十三 团队作业9:Beta冲刺与团队项目验收 团队名称 <hello--wor ...

  9. TODO 竞品分析方法——关于导航评测的一些笔记

    参考:移动App性能评测与优化 chapter4讲了地图怎么测,虽然不测地图,但是里面有关竞品分析的部分写得非常好,很多解决方案真的很精彩.记录一下. 我之前的竞品分析测试,通常是很简单的竞品数据层面 ...

  10. python实现Bencode解码方法

    近期搞项目中遇到Bencode解码的问题,就用Py写了个Bencode解码的代码.作为笔记保存参考. BEncoding是BitTorrent用在传输数据结构的编码方式,这种编码方式支持四种类型的数据 ...