? ? ? ?通過把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/icon_heart.png"); //相對路徑方式
lv_img_set_src(img , "A:/home/ubuntu/project/res/list_icons/icon_heart.png");
注意:因為配置是 LV_FS_POSIX_LETTER 'A',所以在路徑中要添加?A:
?進行匹配