JPG 解码器¶
允许在 LVGL 中使用 JPG 图像。此外,它还允许使用一种称为 Split JPG (SJPG) 的自定义格式,该格式可以在嵌入式系统上以更优化的方式解码。
概述¶
支持普通 JPG 和自定义 SJPG 格式。
解码普通 JPG 会消耗与整个未压缩图像大小相同的 RAM(仅推荐用于具有更多 RAM 的设备)。
SJPG 是一种基于“普通” JPG 的自定义格式,专为 LVGL 设计。
SJPG 是“分割 JPEG”,它是带有 sjpg 头的小型 JPEG 片段的集合。
SJPG 的大小几乎与 JPG 文件相当,或者可能稍大一些。
实现了从文件和 C 数组中读取文件。
SJPG 帧片段缓存支持在缓存可用时快速获取行数据。
默认情况下,SJPG 图像缓存大小为图像宽度 * 2 * 16 字节(可以修改)。
当前仅支持 16 位图像格式(TODO)。
仅解码 JPG 和 SJPG 图像的必要部分,因此它们无法缩放或旋转。
用法¶
如果在 lv_conf.h 中通过 LV_USE_SJPG 启用,LVGL 将自动注册一个新的图像解码器,因此 JPG 和 SJPG 文件可以直接用作图像源。例如:
lv_img_set_src(my_img, "S:path/to/picture.jpg");
请注意,需要注册一个文件系统驱动程序才能从文件中打开图像。可以在此处了解更多信息,或者只需在 lv_conf.h 中通过 LV_USE_FS_... 启用一个文件系统驱动程序。
转换器¶
将 JPG 转换为 C 数组¶
使用 LVGL 在线工具 https://lvgl.io/tools/imageconverter
颜色格式 = RAW,输出格式 = C 数组
将 JPG 转换为 SJPG¶
需要 python3 和 PIL 库。(可以通过 pip3 install pillow 安装 PIL)
将 JPG 转换为 SJPG 的步骤:
将要转换的图像复制到
lvgl/scripts目录。进入目录:
cd lvgl/scripts执行命令:
python3 jpg_to_sjpg.py image_to_convert.jpg。它会生成一个 C 文件和一个 SJPG 图像。
预期结果如下:
转换开始...
输入:
image_to_convert.jpg
分辨率 = 640 x 480
输出:
用时 = 1.66 秒
二进制大小 = 77.1 KB
walpaper.sjpg (二进制文件)
walpaper.c (C 数组)
一切正常!
示例¶
加载 SJPG 图像¶
C code
GitHub#include "../../lv_examples.h"
#if LV_USE_SJPG && LV_BUILD_EXAMPLES
/**
* Load an SJPG image
*/
void lv_example_sjpg_1(void)
{
lv_obj_t * wp;
wp = lv_img_create(lv_scr_act());
/* Assuming a File system is attached to letter 'A'
* E.g. set LV_USE_FS_STDIO 'A' in lv_conf.h */
lv_img_set_src(wp, "A:lvgl/examples/libs/sjpg/small_image.sjpg");
}
#endif
#!/opt/bin/lv_micropython -i
import lvgl as lv
import display_driver
import fs_driver
fs_drv = lv.fs_drv_t()
fs_driver.fs_register(fs_drv, 'S')
wp = lv.img(lv.scr_act())
# The File system is attached to letter 'S'
wp.set_src("S:small_image.sjpg")
wp.center()