当前位置:C++技术网 > 资讯 > 实现GIF播放器对GIF图片播放的更多控制

实现GIF播放器对GIF图片播放的更多控制

更新时间:2015-06-26 21:02:18浏览次数:1+次

    在《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("播放"));

    如果还有疑问,可以留言回复。