在《C++快速开发一个GIF图片播放器》中,只是实现了一个基础的能够播放GIF图片的功能,而对GIF图片实现更多控制,如选择GIF图片文件、播放和暂停GIF播放,根据GIF图片调整窗口大小等,需要在本文进行讲述。
在使用一个包装良好的类时,我们只需要看类中头文件提供public权限下面的东西,其他的就不用看了。因为public属于类对外的接口,有了这个接口,就可能很好的使用这个类了。除非你有类的源代码,且你想修改它,否则,只需要看public就可以了。对于公共的结构体,在使用时需要看看。重点在公共函数上。
我们先来看看CPictureEx类的公共接口函数。
Load():加载一张图片到内存,此类还可以读取其他类型的图片,而不限于GIF图片。
UnLoad():从内存卸载图片。
Draw():绘制图片或者播放GIF图片。
Stop():停止播放GIF图片。
GetSize():获取图片的大小。
GetFrameCount():获取图片的帧数,非GIF图片如JPG都是一帧,GIF图片则有很多个序列帧。正是因为是连续的帧,挨个显示这些图片,就形成了动画。
GetBkColor();获取背景颜色。
SetBkColor():设置背景颜色。
IsGIF():判断是否GIF图片。
IsPlaying():判断是否正在播放GIF图片。
IsAnimatedGIF():判断是否动画GIF图片。GIF图片如果只有一帧,就不是动画图片。
打开GIF图片,并调整窗口大小和播放GIF图片实现代码如下:
// - 打开文件对话框
CString FilePathName;
CFileDialog dlg(TRUE, //TRUE为OPEN对话框,FALSE为SAVE AS对话框
NULL, NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
(LPCTSTR)_TEXT("GIF Files (*.gif)|*.gif||"),NULL);
if(dlg.DoModal()==IDOK)
FilePathName=dlg.GetPathName(); //文件名保存在了FilePathName里
else
return;
// - 显示GIF图片前先显示提示
SetDlgItemText(IDC_GIF,_T("\r\n\r\n\r\n\r\n\r\n\r\n加载GIF图片中..."));
m_gif.Load(FilePathName);// - 加载图片
SIZE gifSize = m_gif.GetSize();// - 获取图片大小
CRect rect;
GetClientRect(rect);// - 获取窗口大小
int x = GetSystemMetrics(SM_CXSCREEN)/2 - 200;// - 获取屏幕宽度
int y = GetSystemMetrics(SM_CYSCREEN)/2 - 200;// - 获取屏幕高度
/* - 根据屏幕大小和GIF图片大小调整窗口位置和大小 - */
MoveWindow(x,y,gifSize.cx,gifSize.cy+100);
m_gif.Draw();// - 播放GIF图片
“播放”和“暂停”按钮文字切换实现GIF图片的播放和暂停。实现代码如下:
m_gif.IsPlaying()?m_gif.Stop():m_gif.Draw();
CString str;
GetDlgItemText(IDC_BUTTON1,str);
(str==_T("播放"))?SetDlgItemText(IDC_BUTTON1,_T("暂停")):
SetDlgItemText(IDC_BUTTON1,_T("播放"));
如果还有疑问,可以留言回复。