26.4 多媒体文件的播放
多媒体文件的格式有多种,本节介绍几种常见的多媒体文件的播放方法。主要包括如何实现播放GIF动画、Flash动画、RM文件、VCD文件和显示JPEG图像。用户通过本节的学习,应该掌握这些基本多媒体文件的播放方法。
26.4.1 播放GIF动画
GIF文件是图形交换文件的格式,是由一组相隔指定间隔时间显示的图片组组成。使用GDI+可以播放GIF动画。为此,首先需要调用GetFrameDimensionsCount()函数来获取GIF动画中具有的帧数数目,并通过Image对象的GetPropertyItem()函数获取每帧图片之间的时间间隔。然后显示GIF文件,并设置当前有效的框架数据,根据获取的每帧的时间间隔,停顿一定的时间,继续显示,如此循环,就可以播放GIF动画了。具体代码如下:
- void CPlayMultiMediaDlg::OnButtonPlaygif() // 播放GIF文件
- {
- Image image(L"C:\\byebye.gif"); // 定义Image对象
- UINT uiCount = image.GetFrameDimensionsCount(); // 获取帧数
- GUID *pDimensionIDs=(GUID*)new GUID[uiCount];
- image.GetFrameDimensionsList(pDimensionIDs, uiCount); // 获取帧数据
- UINT uiFrameCount=image.GetFrameCount(&pDimensionIDs[0]);
- delete []pDimensionIDs;
- UINT uiSize;
- uiSize = image.GetPropertyItemSize(PropertyTagFrameDelay);
- // 获取帧延时长度
- PropertyItem* pItem = (PropertyItem*)malloc(uiSize);
- image.GetPropertyItem(PropertyTagFrameDelay, uiSize, pItem);
- // 获取属性项
- GUID Guid = FrameDimensionTime;
- CDC* pDC = GetDC(); // 获取设备上下文
- while(true) // 依次处理每帧
- {
- Graphics gh(pDC->m_hDC); // hDC是
外部传入的画图DC - gh.DrawImage(&image,0, 0, image.GetWidth(), image.GetHeight());
- image.SelectActiveFrame(&Guid, uiCount++); // 重新设置
当前的活动数据帧 - if(uiCount == uiFrameCount) uiCount= 0;
- long lPause = ((long*)(pItem->value))[uiCount];// 计算
此帧要延迟的时间 - Sleep(lPause); // 停止
指定长度时间值 - }
- }
上面代码在画布的左上角播放C:\\byebye.gif GIF动画。