LVGL v8 基础图像(Baseimg)
lvsf_baseimg 是 SiFli 基于 LVGL lv_img 封装的基础图像控件,是 lvsf_imgarray 等图片类控件的基类。它支持多种图像显示模式:图组索引/数值/Q24.8 定点、指针(无级变化/跳针)、序列帧(正向/逆向/正逆向循环),并支持角度、缩放、旋转中心、循环次数和值表映射。
主要头文件:middleware/lvgl/lvsf/gui_widgets/lvsf_baseimg.h
依赖控件:LVGL img(
LV_USE_IMG)
备注
该控件暂无对应 lvgl_v8_baseimg example,详细用法参考头文件注释及 SDK 配置。
功能简介
支持多种图像类型:图组索引(数值即序号)、图组数值(一段数值对应一张图)、图组 Q24.8 定点、指针无级变化、指针跳针、序列帧正/逆/正逆向循环。
支持三种图像源类型:内存描述符、文件、序列帧。
支持角度、缩放、旋转中心 X/Y 设置。
支持序列帧起止索引、当前索引、空索引设置与循环次数控制(-1 无限循环)。
支持状态回调(播放开始/停止/恢复/暂停/完成等)和索引回调。
支持值表(value_table)做数值到图像/位置的映射。
使用场景
序列帧动画播放(正向/逆向/往复循环)。
指针式仪表表盘(无级或跳针)。
图组索引切换、数值到图片映射的指示器。
作为
lvsf_imgarray等控件的基类使用。
支持的开发板
见对应 lvgl_v8 example 或 SDK 配置。
配置与初始化
lvsf_baseimg 依赖 LVGL img 组件。在 menuconfig 中确认已开启:
CONFIG_LV_USE_IMG=y
BSP 中通过 LVSF_USE_BASEIMG 宏控制该控件的编译。
创建对象的最小流程:
#include "lvsf_baseimg.h"
lv_obj_t *img = lv_baseimg_create(lv_scr_act());
API 说明
枚举定义
图像类型 lv_baseimg_type_t:
取值 |
含义 |
|---|---|
|
图组,序列模式,数值就是图片序号 |
|
图组,数值模式,一段数值对应一张图 |
|
图组,数字模式,数据是 Q24.8 格式 |
|
指针,无级变化 |
|
跳针 |
|
序列帧,持续正向循环(0x0f) |
|
序列帧,持续逆向循环(0x1f) |
|
序列帧,持续正逆向循环(0x10f) |
播放状态 lv_baseimg_state_t:
取值 |
含义 |
|---|---|
|
空状态 |
|
序列帧播放开始(停止或刚开始触发) |
|
序列帧播放停止,序号归零 |
|
序列帧播放恢复(暂停后播放触发) |
|
序列帧播放暂停,序号不变 |
|
序列帧正向播放完成 |
|
序列帧反向播放完成 |
源类型 lv_baseimg_src_type_t:
取值 |
含义 |
|---|---|
|
内存描述符 |
|
文件 |
|
序列帧 |
回调类型
类型定义 |
功能说明 |
|---|---|
|
基础图像设置到指定索引时调用 |
|
基础图像状态改变时调用; |
创建与刷新
接口函数 |
功能说明 |
参数/返回值说明 |
|---|---|---|
|
创建基础图像对象 |
|
|
刷新定时器回调 |
|
状态与源设置
接口函数 |
功能说明 |
参数/返回值说明 |
|---|---|---|
|
设置状态 |
|
|
设置源数组(内存描述符) |
|
|
通过文件路径设置源数组 |
|
|
设置序列帧图片源和序号 |
|
|
设置状态回调 |
|
|
设置值表 |
|
角度、缩放与索引
接口函数 |
功能说明 |
参数/返回值说明 |
|---|---|---|
|
设置图像角度 |
|
|
设置图像缩放 |
|
|
设置起始索引 |
|
|
设置结束索引 |
|
|
设置当前索引 |
|
|
设置图像类型 |
|
|
设置空索引 |
|
|
设置旋转中心 X 坐标 |
|
|
设置旋转中心 Y 坐标 |
|
|
设置循环次数 |
|
查询接口
接口函数 |
功能说明 |
参数/返回值说明 |
|---|---|---|
|
获取当前角度 |
返回角度值 |
|
获取当前缩放 |
返回缩放值 |
|
获取起始索引 |
返回起始索引 |
|
获取结束索引 |
返回结束索引 |
|
获取当前索引 |
返回当前索引 |
|
获取图像类型 |
返回图像类型( |
|
获取空索引 |
返回空图像索引 |
|
获取旋转中心 X 坐标 |
返回旋转中心 X |
|
获取旋转中心 Y 坐标 |
返回旋转中心 Y |
典型用法
根据头文件接口,序列帧正向循环播放的典型流程为:创建对象 → 设置图像类型为序列帧 → 设置源数组 → 设置循环次数 → 启动播放:
#include "lvsf_baseimg.h"
lv_obj_t *img = lv_baseimg_create(parent);
/* 序列帧:持续正向循环 */
lv_baseimg_set_img_type(img, BASEIMG_TYPE_SEQUENCE);
lv_baseimg_set_src_array(img, frame_dsc_arr, 0, FRAME_CNT - 1);
lv_baseimg_set_loop(img, -1); /* 无限循环 */
lv_baseimg_set_state(img, BASEIMG_STATE_PLAY_START); /* 启动播放 */
指针式表盘(无级变化)的典型流程为:
lv_baseimg_set_img_type(img, BASEIMG_TYPE_POINTER);
lv_baseimg_set_pivot_X(img, 60);
lv_baseimg_set_pivot_y(img, 60);
lv_baseimg_set_angle(img, angle); /* 角度驱动指针 */
详细用法参考头文件注释。
效果展示
该控件暂无对应 example,运行 lvgl_v8_imgarray 等基于 baseimg 的示例可查看其派生控件效果。
参考文档
源码路径:
middleware/lvgl/lvsf/gui_widgets/lvsf_baseimg.h