你在 LVGL 项目里想显示一张产品 logo 或用户头像,发现直接 lv_img_set_src 一张 PNG 上不去,或者切图时屏幕卡一下——那是解码与缓存没搞对。本文讲清 v8.3 下图片的两种存储方式(C 数组 vs 文件)、PNG/JPG 怎么上屏、缓存 LV_IMG_CACHE_DEF_SIZE 怎么调、手动预解码,以及"缓存被动画清空"这个 v8.3 真实坑,所有 API 按 v8.3 官方文档与论坛案例核验。
一、图片在 LVGL 里到底是什么
LVGL 的图片本质是 lv_img_dsc_t:一个头部(宽、高、颜色格式 cf)+ 指向像素数据的指针 data。两种落地方式,决定了你的资源怎么组织:
- C 数组变量:用官方 imageconverter 把 PNG 转成
.c,编译期链接进固件。零运行时解码、随取随用,但占 Flash、换图要重编译。
- 文件:PNG/JPG/bin 存在 SD 卡或 SPI Flash,运行时经文件系统驱动读入 RAM 再绘制。换图不用重编,但解码吃 CPU 和内存。
颜色格式(cf)决定字节排布:TRUE_COLOR / TRUE_COLOR_ALPHA(带透明)/ INDEXED(调色板)/ ALPHA_ONLY / RAW(PNG/JPG 这类需外部解码器)。
二、显示一张编译期 C 数组图片
最稳、最省心,适合固定 UI 元素(图标、logo、背景)。
LV_IMG_DECLARE(my_logo); // 在 imageconverter 生成的 .
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/videwhy/article/details/170230367



