界面库lvgl使用图片有三种方式:
1、将图片转换为源文件使用
转为源文件使用则需要使用在线或者离线图片转换工具,在线转换工具可使用官方提供的https://lvgl.io/tools/imageconverter 离线转换工具可以用git上大神封装的Windows版本的Lvgl_image_convert_tool: 基于LVGl图片转换离线版封装的小工具,不仅有界面,还可以一键生成到项目里哦 (gitee.com)
https://gitee.com/gzmarkz/Lvgl_image_convert_tool 也挺好用,自行下载,使用方法就不多说了,一看就会。
转换生成的代码放到自己的工程中,然后在代码中添加:
LV_IMG_DECLARE(my_test_img);
lv_obj_t * img = lv_img_create(lv_scr_act(), NULL);
lv_img_set_src(img, &my_test_img);
则可以正常显示图片。
此方法的好处是不管是png、jpg还是gif格式,基本都能通过这种方式来使用,但却有个坏处,就是图片文件本身并不大,但转换后的源码文件却比较大,比如我试过一张图片不到100k,转换后的源文件就又10+M,这样对于嵌入式系统本身存储较小的就会是个问题。
2、直接使用图片
在lvgl库的8.0版本开始,是支持直接使用图片的,8.0版本之前,因为没有集成图片格式的解码器,所以不能直接使用。8.0之前的版本要使用需要直接添加指定图片格式的解码库,比较麻烦,8.0开始将解码库集成到了lvgl中,因此可以直接使用。
具体使用的代码很简单,连图片变量的声明都不需要了,像这样:
lv_obj_t * img = lv_img_create(lv_scr_act());
lv_img_set_src(img, "./lv_lib_png/png_decoder_test.png");
实际操作却不像代码看上去那么简单,首先需要打开lv_conf.h中指定图片格式功能的宏定义,如LV_USE_PNG等,可以看头文件中支持哪些方式。我尝试了这种方法,但均没有正常显示出图片,待继续研究明白后再来补充……