当前位置: 首页 > 编程笔记 >

VC++实现输出GIF到窗体并显示GIF动画的方法

双俊人
2023-03-14
本文向大家介绍VC++实现输出GIF到窗体并显示GIF动画的方法,包括了VC++实现输出GIF到窗体并显示GIF动画的方法的使用技巧和注意事项,需要的朋友参考一下

本文讲述了VC++在窗体中显示GIF动画的方法,这是主要代码部分,在这段代码中,VC++将使用GDI技术加载GIF图像,定义GUID数组、定义指针、初始化各成员变量、释放属性对象、释放GUID等资源等。

代码如下:

//加载GIF文件
void COutputGIFDlg::OnBrowse()
{
 CFileDialog flDlg(TRUE, "", "", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
   "GIF|*.gif;||");//定义文件打开对话框
 if (flDlg.DoModal() == IDOK)
 {
 CString szText;
 szText = flDlg.GetPathName();
 m_FileName.SetWindowText(szText);
 m_pBmp = Bitmap::FromFile(szText.AllocSysString()); //加载GIF图像
 szText.ReleaseBuffer();
 m_nCount = m_pBmp->GetFrameDimensionsCount(); //获取帧维数
 GUID *pGuids = new GUID[m_nCount]; //定义一个GUID数组
 m_pBmp->GetFrameDimensionsList(pGuids,m_nCount); //获取图像帧的GUID
 m_FrameCount = m_pBmp->GetFrameCount(pGuids); //获取GIF帧数
 UINT nSize; //定义一个整型变量
 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); //释放属性对象
 delete [] pGuids; //释放GUID
 m_nIndex = 0; //初始化成员变量
 KillTimer(1);
 SetTimer(1, 300, NULL);
 }
}
void COutputGIFDlg::OnTimer(UINT nIDEvent)
{
 GUID Guid = FrameDimensionTime; //定义一个GUID
 CDC* pDC = GetDC(); //获取窗口的设备上下文
 //定义一个内存画布
 CMemDC dc(pDC, CRect(20, 50, m_pBmp->GetWidth()+20, m_pBmp->GetHeight()+50));
 Graphics gh(dc.m_hDC); //定义一个图像对象
 //向设备上下文中绘制图像
 gh.DrawImage(m_pBmp, 0, 0, m_pBmp->GetWidth(), m_pBmp->GetHeight());
 m_pBmp->SelectActiveFrame(&Guid, m_nIndex++);//设置下一帧
 if(m_nIndex == m_FrameCount) //判断当前帧是否为尾帧
  m_nIndex = 0; //将当前帧设置为第一帧
 CDialog::OnTimer(nIDEvent);
}
void COutputGIFDlg::OnCancel()
{
 if (m_pBmp != NULL)
 {
 delete m_pBmp;
 m_pBmp = NULL;
 }
 CDialog::OnCancel();
}
 类似资料:
  • 问题内容: 我想在应用程序中显示GIF动画图像。我发现,Android本身并不支持动画GIF的困难方式。 但是,它可以使用AnimationDrawable显示动画: 开发>指南>图像和图形> Drawables概述 该示例使用在应用程序资源中另存为帧的动画,但是我需要直接显示动画gif。 我的计划是将动画GIF分解为帧,并将每个帧作为可绘制对象添加到AnimationDrawable中。 有谁知

  • 问题内容: 您好,我正在使用Swing在Java 1.6上编写GUI应用程序。 我有一个弹出屏幕,该窗口在加载Swing gui时以及稍后会显示gif动画。 我的弹出屏幕是一个JDialog。动画应显示在通过以下方式添加到Jdialog的JLabel上: 现在的事情是,动画仅在gui加载后显示。我相信在GUI加载时(这是我的应用程序中的繁重操作),EDT太忙了,无法运行动画。 现在的问题是,将GU

  • 1.4. GIF动画 下面的程序会演示Go语言标准库里的image这个package的用法,我们会用这个包来生成一系列的bit-mapped图,然后将这些图片编码为一个GIF动画。我们生成的图形名字叫利萨如图形(Lissajous figures),这种效果是在1960年代的老电影里出现的一种视觉特效。它们是协振子在两个纬度上振动所产生的曲线,比如两个sin正弦波分别在x轴和y轴输入会产生的曲线。

  • 问题内容: 我正在尝试制作一个程序来使用Tkinter显示动画GIF。这是我最初使用的代码: test.gif是以下GIF: 这可以正常工作,但是GIF的质量很糟糕。我尝试将其更改为以下内容: 但是,这偶尔会闪烁图像。虽然图片看起来不错,但是作为程序却毫无用处。我究竟做错了什么? 问题答案: 首先,您要为每个帧创建一个新的画布对象。最终,您将有成千上万的图像相互叠加。这是非常低效的;当您开始具有数

  • 在你把我和另一个类似的问题联系起来之前,比如这个或那个。我要说的是,我完全按照答案所说的做了,但我的gif不会像它应该做的那样动画化(尽管它是显示出来的)。 下面是我在一个函数中所做的操作,该函数通过主应用程序函数堆栈显示。导航容器和堆栈中的屏幕。导航器。(我使用React导航在屏幕上移动,这里的上下文是按下一个按钮,它显示DetailsScreen函数的内容) 这将显示我的gif的第一个静态图像

  • 它与文件一起工作很好,但是当我使用文件时,它是空的。我在某处读到了将重命名为,但它只显示一帧动画gif而没有动画。有什么想法吗?