目录
一、前言
二、c文件
三、bin文件
四、解码库
参考资料
lvgl插入图片的方法主要有三种:
首先将所需的图片进行初步处理,通过ps简单调整一下图片的像素尺寸。像素较大的图片转化为c文件一个是转化速度慢,另一个单片机的内存有限烧录不进去。这里推荐调整为自己的屏幕尺寸大小左右(长宽100像素左右)。
然后就可以开始进行图片的转化,一般有两种方式:
我这里是测试一下,用官方的在线工具转换即可(大佬的离线工具有一些批量转换之类的功能,比官方的要好用一些),设置可以看下图。其中color format可以导出不同类型的数据,选择带alpha词条的类型会多出透明度的设定,选择chroma词条的类型可以让图片一些固定颜色的部分不显示这里就用一般的CF_COLOR_TRUE格式即可。
导出c文件后放到项目的代码里,记得在cmake文件里编译一下,然后代码里就可以引用,文件里自己会带一个变量,与导出时设定的文件名一致。然后通过lv代码就可以调用图片了。这里简单贴一下我的代码画图部分,代码的其他部分可以看前一篇文章,就把界面绘制的部分替换一下就行。
这里简单说两个函数:
void gui_test(){
lv_obj_t *scr = lv_scr_act();
lv_obj_clean(scr);
lv_obj_remove_style_all(scr);
lv_obj_set_style_bg_opa(scr, LV_OPA_COVER, 255);
lv_obj_set_style_bg_color(scr, lv_color_black(), 0);
LV_IMG_DECLARE(tju);
lv_obj_t *img1 = lv_img_create(scr);
lv_img_set_src(img1, &tju);
lv_obj_align(img1, LV_ALIGN_CENTER, 0, 0);
lv_img_set_zoom(img1,255);
}
至此,图片已经在屏幕上成功显示出来了。
bin图片的加载与c文件相比,首先需要进行文件系统的加载,加载完文件系统后,只需要将bin图片放在sd卡内然后对gui_test函数稍作修改即可:
lv_obj_t *scr = lv_scr_act();
lv_obj_clean(scr);
lv_obj_remove_style_all(scr);
lv_obj_set_style_bg_opa(scr, LV_OPA_COVER, 0);//0不透明
lv_obj_set_style_bg_color(scr, lv_color_black(), 0);
//LV_IMG_DECLARE(tju);
lv_obj_t *img1 = lv_img_create(scr);
lv_img_set_src(img1,"S:/image/tju_120.bin");
lv_obj_align(img1, LV_ALIGN_CENTER, 0, 0);
//lv_img_set_zoom(img1,255);
如上所示,将LV_IMG_DECLARE这一声明图片的语句注释掉,然后将图片更换为图片在内存卡中的路径即可。
值得注意的是,bin文件是不能修改显示的大小的,lv_img_set_zoom函数会使图片无法显示,记得将图片修改为合适大小的像素进行显示(经过测试如果图片较大,会显示图片的一部分充满屏幕,而且会加载的比较慢)。
而其他的图片调整函数是否会引起这一问题还没有进行测试(如旋转等),之后测试完也贴在这:
todo
除此之外,图片就可以在屏幕上正常显示了:
todo
LVGL V8 图片解码库移植 - 哔哩哔哩 (bilibili.com)
Images — LVGL documentation (100ask.net)
Online image converter - BMP, JPG or PNG to C array or binary | LVGL
LVGL库入门教程 - 动画 - 冰封残烛 - 博客园 (cnblogs.com)