一、项目描述:
1.VS2017+Duilib 库进行窗口绘制,使用 XML 描述界面风格
2.在 DuiDesigner_d.exe 中创建 Gif 动图程序窗口
3.借助 ffmpeg 工具用窗口响应图片或视频进行动图制作
4.运行程序,用户选择图片/视频生成
三、环境:
- VS2017
- Duilib 库
- XML
- ffmpeg 工具
三、实现效果:
- 绘画出一个可以生成动态图的软件的界面
- 图片生成:
- 视频生成:
①加载路径
②截取视频
③提取字幕
④修改字幕
⑤提取视频
⑥写回字幕
⑦动态图生成
四、具体实现
-
环境搭建
①将Duilib源文件和生成的lib文件夹拷贝到工程目录下
②对环境进行配置
③将编译后duilib-master文件夹下bin目录中的dll文件拷贝到项目的exe文件夹中
④增加头文集 -
使用DuiDesigner_d.exe工具对窗口进行绘画
关于控件操作和XML配置参考大佬的:duilib入门 -
创建一个窗口类直接继承WindowImplBase,重写父类的GetWindowClassName、GetClassStyle、GetSkinFile、Notify四个函数。
-
选择生成动态图方式,如果是图片,关于视频的控件失效,如果是视频,关于图片的控件失效
((CEditUI*)m_PaintManager.FindControl(_T("")))->SetEnabled(false);
-
使用cmd给ffmpeg发送命令,生成动态图
① 初始化SHELLEXECUTEINFO结构体
SHELLEXECUTEINFO strSEInfo;
memset(&strSEInfo, 0, sizeof(SHELLEXECUTEINFO));
② 调用ShellExecuteEx函数指定shell命令
strSEInfo.cbSize = sizeof(SHELLEXECUTEINFO);
③ 调用WaitForSingleObject(strSEInfo.hProcess, INFINITE);
函数等待cmd命令执行结束,INFINITE表