seqframe控件¶
1. 使用场景¶
序列帧(seqframe)控件基于LVGL图片对象扩展,用于实现图片序列的灵活播放控制,提供:
单张/多张图像的单次播放、连续播放、循环播放;
自定义帧间隔、延迟启动、指定帧索引播放等控制。
2. 接口介绍¶
2.1 基础功能¶
接口函数 |
功能说明 |
关键参数说明 |
|---|---|---|
|
创建seqframe自定义控件实例,基于LVGL图片对象扩展 |
parent:父对象(如屏幕、容器),NULL表示默认屏幕 |
|
用于为控件绑定pkg_img_seq的打包序列帧 |
src: |
|
为控件配置外置存储的资源路径及帧参数 |
prefix:资源完整路径(该路径下资源需为bin格式);img_cnt:总帧数;img_idx:起始帧索引 |
|
跳转到序列帧的指定索引帧并显示 |
idx:目标帧索引(从0开始计数) |
|
手动切换至下一帧并返回当前帧索引 |
返回值:1表示切换成功(未到最后一帧);0表示切换失败(已到最后一帧) |
2.2 播放控制¶
接口函数 |
功能说明 |
关键参数说明 |
|---|---|---|
|
配置播放帧间隔、延迟启动时间 |
|
|
启动或恢复序列帧播放(开启内部计时器) |
|
|
暂停序列帧播放(暂停内部计时器) |
|
|
配置序列帧的播放模式 |
|
3. 播放模式¶
lv_seqframe控件支持两种播放模式:
3.1 播放多张图片打包机制的序列帧图片 - pkg_img_seq¶
该机制基于pkg_img_seq封装,与
pkg_img_seq提供的单张图片展示机制(lv_img_set_src_seq)不同,该控件提供了序列帧动自动顺序播放功能。该机制内置既打包资源在固件中(生成
.c),也可以访问文件系统中(生成.bin)。
3.1.1 图片存放和转换规则¶
序列帧图片需要遵循pkg_img_seq里描述的规则存放,eZIP会根据存放子目录(包含__seq子串)转换为eZIP格式并打包为一个bin。
3.1.2 调用方式¶
调用
lv_seqframe_create,创建seq_obj调用
lv_seqframe_set_src(seq_ob, APP_GET_IMG(xxx))设置打包序列帧资源调用
lv_seqframe_open设置播放参数(帧间隔和延迟)调用
lv_seqframe_resume启动播放调用
lv_seqframe_pause暂停播放
3.2 播放某个目录下的序列图片(逐张)- prefix_seqframe¶
该机制提供了播放某个目录下序列图片的机制,只能用于图片存放在文件系统下的场景。
3.2.1 图片存放和转换规则¶
序列帧图片通常从视频抽取或者采用图形工具逐张生成,并按播放顺序依次为xxx0.png、 xxx1.png、 ··· xxxn.png,转换工具为GraphicsTool。
转换之后的图片存放在某个目录下,需要按照播放顺序依次为为xxx0.bin、 xxx1.bin、 ··· xxxn.bin。
3.1.2 调用方式¶
调用
lv_seqframe_create,创建seq_obj调用
lv_seqframe_prefix设置资源路径及参数调用
lv_seqframe_playback_mode设置播放模式调用
lv_seqframe_open设置播放参数(帧间隔和延迟)调用
lv_seqframe_select设置当前序列帧(可选)调用
lv_seqframe_resume启动播放调用
lv_seqframe_pause暂停播放
4. 示例¶
4.1 播放多张图片打包机制的序列帧图片 - pkg_img_seq¶
4.1.1 资源¶
例程资源路径如下:
4.1.2 示例代码¶
// 创建序列帧控件,挂载到当前活动屏幕
lv_obj_t *seqframe = lv_seqframe_create(lv_scr_act());
// 绑定内置的序列帧动画资源
lv_seqframe_set_src(seqframe, APP_GET_SEQ(img_seqframe_loading));
// 配置播放参数:帧间隔50ms,延迟50ms后启动播放
lv_seqframe_open(seqframe, 50, 50);
// 启动序列帧动画播放
lv_seqframe_resume(seqframe);
// 设置控件在屏幕居中显示
lv_obj_align(seqframe, LV_ALIGN_CENTER, 0, 0);
4.1.3 示例效果展示¶
4.2 播放某个目录下的序列图片(逐张)- prefix_seqframe¶
4.2.1 资源¶
例程资源路径如下: (资源存放至外置 SD 卡/sd/photo/目录下)
4.2.2 示例代码¶
// 创建序列帧控件,挂载到当前活动屏幕
lv_obj_t *seqframe_prefix = lv_seqframe_create(lv_scr_act());
// 配置外置资源路径及参数:SD卡路径、总帧数18帧、从第0帧开始播放
lv_seqframe_prefix(seqframe_prefix, "/sd/photo/beauty", 18, 0);
// 设置序列帧为无限循环播放模式
lv_seqframe_playback_mode(seqframe_prefix, LV_SEQFRAME_PLAY_LOOP);
// 配置播放参数:帧间隔500ms,延迟50ms后启动播放
lv_seqframe_open(seqframe_prefix, 500, 50);
// 手动定位到序列帧第0帧
lv_seqframe_select(seqframe_prefix, 0);
// 启动序列帧动画播放
lv_seqframe_resume(seqframe_prefix);
// 设置控件在屏幕底部居中显示
lv_obj_align(seqframe_prefix, LV_ALIGN_BOTTOM_MID, 0, 0);
⚠️ 开发注意事项
外置资源需存放至设备可正常访问的存储路径(如 SD 卡
/sd/photo/目录);外置资源文件命名必须为图片名+纯数字连续序号,后缀为 bin 格式(如
beauty0.bin, beauty1.bin, beauty2.bin...),否则无法正常加载帧资源;内置资源与外置资源为二选一配置方式,不可对同一个控件同时配置两种资源路径。
参考例程路径:solution\examples\_dynamic_app\c\app\video。(注意该例程中由于路径是通过File Explorer选择,因此,文件名必须为纯数字连续序号)
4.2.3 示例效果展示¶