LVGL直接解码png图片的方法

       通过把png文件解码为.C文件,再放到工程中的供使用,这种方式随时速度快(应为已经解码,代码中只要直接加载图片数据显示出来即可),但是不够灵活,适用于哪些简单又不经常需要更换UI的场景下使用。如果面对一下较为复杂的工程,而且UI经常需要更新的情况,更使用使用图片解码库,程序运行时动态解码图片,这样图片原文件可以放在flash、SD卡等位置,当需要更新某个图片时,直接替换图片文件即可。

       下面以png图片为例,讲解LVGL如何通过png解码库直接解码png文件,从而实现LVGL动态解码png图片。LVGL已经无缝对接了 png 解码器,LVGL是对接lodepng 库来实现 PNG 图像的解码功能,我们只要打开该库,然后适当配置即可。

1. 在lv_conf.v文件中打开 LV_USE_PNG 宏,同时打开文件系统选项,如下图:

说明:

LVGL8.0及以上集成了文件系统的使用,不需要自己移植对应的文件系统IO操作接口。

LV_USE_FS_STDIO:SD 之类的外设中使用的,比如 STM32 和 esp32 等,使用此类文件系统接口。

LV_USE_FS_POSIX:Linux系统时使用

LV_USE_FS_WIN32:window系统时使用

LV_USE_FS_FATFS:通过自定义文件系统进行使用的。

2. 通过 lv_png_init() 初始化解码器。

3. 直接使用,使用方式分相对路径和绝对路径:

lv_obj_t *img = lv_img_create(activity->ui);
lv_img_set_src(img , "A:./res/list_icons/i
### LVGLPNG 图片的动态更新方法 在嵌入式图形库 LVGL 中,为了实现在运行时动态更新 PNG 图像的功能,可以采用如下方式: #### 创建图像对象并加载初始 PNG 文件 首先创建一个用于显示 PNG 的 `lv_img` 对象,并通过调用 `lv_img_set_src()` 函数指定要加载的第一个 PNG 资源位置。 ```c // 假设 img 是已经存在的 lv_obj_t 类型变量, "path/to/initial.png" 表示初次展示的图片路径. lv_img_set_src(img, "path/to/initial_png"); ``` 当需要更换新的 PNG 显示时,只需再次调用此函数传入新文件名即可完成切换操作[^1]。 #### 使用缓冲区处理二进制数据流形式的 PNG 进行实时刷新 对于某些场景下可能无法直接访问存储设备中的文件系统来获取最新的 PNG 数据,则可以通过内存中的字节数组作为输入源来进行解码渲染。此时应该先准备好包含目标 PNG 完整编码后的 byte 数组 buffer[] ,之后利用自定义读取回调机制配合 `lv_img_decoder_create()` 和 `lv_img_cache_invalidate_src()` 来达到目的[^2]. ```c static bool my_reader(lv_img_decoder_t * decoder, const void ** src_p, uint8_t ** buf_p, size_t * size_p){ static uint8_t index = 0; // 根据实际情况调整这里的逻辑以适应不同场合下的需求 if(/* condition */) { /* Load next image into memory */ load_next_image_into_buffer(); *src_p = &buffer[index]; *buf_p = (uint8_t *)malloc(*size_p); memcpy(*buf_p,*src_p,*size_p); return true; }else{ return false; } } ``` 上述代码片段展示了如何编写一个简单的读取器去管理多张预存于 RAM 或者其他媒介内的 PNG 并按需供给给 LVGL 渲染引擎使用[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值