播放GIF动画



GIF文件是图形交换文件的格式,是由一组相隔指定间隔时间显示的图片组组成。使用GDI+可以播放GIF动画。为此,首先需要调用GetFrameDimensionsCount()函数来获取GIF动画中具有的帧数数目,并通过Image对象的GetPropertyItem()函数获取每帧图片之间的时间间隔。然后显示GIF文件,并设置当前有效的框架数据,根据获取的每帧的时间间隔,停顿一定的时间,继续显示,如此循环,就可以播放GIF动画了。具体代码如下:

 
 
  1. void CPlayMultiMediaDlg::OnButtonPlaygif()          // 播放GIF文件  
  2. {  
  3.     Image image(L"C:\\byebye.gif");                 // 定义Image对象  
  4.     UINT uiCount = image.GetFrameDimensionsCount(); // 获取帧数  
  5.     GUID *pDimensionIDs=(GUID*)new GUID[uiCount];  
  6.     image.GetFrameDimensionsList(pDimensionIDs, uiCount);   // 获取帧数据  
  7.     UINT uiFrameCount=image.GetFrameCount(&pDimensionIDs[0]);  
  8.     delete []pDimensionIDs;  
  9.     UINT uiSize;  
  10.     uiSize = image.GetPropertyItemSize(PropertyTagFrameDelay);  
  11.                                                         // 获取帧延时长度  
  12.     PropertyItem* pItem = (PropertyItem*)malloc(uiSize);  
  13.     image.GetPropertyItem(PropertyTagFrameDelay, uiSize, pItem);  
  14.                                                         // 获取属性项  
  15.     GUID Guid = FrameDimensionTime;  
  16.     CDC* pDC = GetDC();                                 // 获取设备上下文  
  17.     while(true)                                         // 依次处理每帧  
  18.     {  
  19.         Graphics gh(pDC->m_hDC);                    // hDC是 外部传入的画图DC  
  20.         gh.DrawImage(&image,0, 0, image.GetWidth(), image.GetHeight());  
  21.         image.SelectActiveFrame(&Guid, uiCount++); // 重新设置 当前的活动数据帧  
  22.         if(uiCount == uiFrameCount) uiCount0;  
  23.         long lPause = ((long*)(pItem->value))[uiCount];// 计算 此帧要延迟的时间  
  24.         Sleep(lPause);                                 // 停止 指定长度时间值  
  25.     }  

上面代码在画布的左上角播放C:\\byebye.gif GIF动画。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值