LVGL 中图片使用问题
此笔记主要是记录在 LVGL 中使用图片的几种方式,以及使用过程中遇到的问题。最近在 ARM linux 中使用 LVGL 时,发现加载图片变得很卡,一开始还好,当连续加载的图片变多后,特别是动画的过程中直接无法看,折腾了一会直接懵逼了,尝试了各种办法都没搞定,后来发现是我没有好好看文档,导致的问题,这里特意记录一下。
一、基本信息
- lvgl 版本:8.3
- 使用环境:linux
- 屏幕大小:480 *800
二、lvgl外部文件使用
为了方便后面的学习,这里先记录一下在 linux 中通过 lvgl 使用外部文件的方式,有需要的可以参考一下,好像其他博主很少特意记录这个问题,我也折腾了好一会
打开外部文件使用
lvgl 在8.0后就已经集成了 文件系统的使用,不需要像之前那样进行移植,只需要打开一下对应的配置宏即可。
打开 LV_USE_FS_POSIX 宏,如下图所示:

注意:
- 注意图中的四部分,其中②就是在 linux 中使用外部文件必须要打开的,开启方式如图所示,特别需要注意的是其中的A可以配置成任意字符,这里只是标号,稍后在使用的时候会有介绍。
- ①部分开启的是在 SD 之类的外设中使用的,比如 STM32 和 esp32 等
- ③部分开启的是在 windows 中的外设使用。
- ④部分打开后使用的是通过自定义的文件系统进行使用的。
使用方式
使用方式分相对路径和绝对路径,如下所示lv_obj_t *img_btn = lv_imgbtn_create(home_scroll_objx); // 创建按钮 /* 通过相对路径使用 */
lv_imgbtn_set_src(img_btn, LV_IMGBTN_STATE_RELEASED, NULL, "A:./lv_res/images/home/img_cogwheel_argb.jpg", NULL); /* 通过绝对路径使用 */
lv_imgbtn_set_src(img_btn, LV_IMGBTN_STATE_RELEASED, NULL, "A:/home/lv_res/images/home/img_cogwheel_argb.jpg", NULL);
注意:因为配置是 LV_FS_POSIX_LETTER 'A',所以在路径中要添加
A:进行匹配,这里我尝试过不能将 "A:" 配置到 LV_FS_POSIX_PATH 宏中,不然无法使用,
也有不一样的配置方式,如下所示:/*API for open, read, etc*/
#define LV_USE_FS_POSIX 1
#if LV_USE_FS_POSIX
#define LV_FS_POSIX_LETTER '/' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#define LV_FS_POSIX_PATH "/" /*Set the working directory. File/directory paths will be appended to it.*/
#define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/
#endif /* 使用方式 */
lv_imgbtn_set_src(img_btn, LV_IMGBTN_STATE_RELEASED, NULL, "/home/lv_res/images/home/img_cogwheel_argb.jpg", NULL);
但是这样操作后,就不能通过相对路径进行使用,可以根据自己的需要进行配置。
三、图片加载
这里主要有三种加载方式,如下所示:
通过 JPG 解码器将 JPG 转换为 C 数组
通过转换器将 JPG 转换为 SJPG
直接 LVGL 集成的解码器直接使用外部的 jpg、png、bim图片
通过 JPG 解码器将 JPG 转换为 C 数组
这里我之前有笔记记录过,所以就不详细介绍了,有需要的可以看看,LVGL 显示图片。通过转换器将 JPG 转换为 SJPG
这里是通过 LVGL 提供的插件将 jpg 转成 sjpg,插件是 python 插件,所以在使用之前需要安装 python 环境
转换器在源码中可以找到,路径是:lvgl/scripts 目录下的 jpg_to_sjpg.py
在使用之前先确保安装 pillow 组件,安装命令如下
# 安装命令
pip install pillow
# 卸载命令
pip uninstall pillow
进行图片装换,操作如下
# windows CMD
jpg_to_sjpg.py img_cogwheel_argb.jpg # windows PowerShell
./jpg_to_sjpg.py img_cogwheel_argb.jpg # linux
python3 jpg_to_sjpg.py img_cogwheel_argb.jpg

转换完成后会在文件中生成一个 SJPG 和 C 文件,系统的小伙伴可以发现,这里的使用方式和方式1的区别不是很大,只是在 SJPG 文件中加入了一些描述信息
使用方式:
lv_imgbtn_set_src(img_btn, LV_IMGBTN_STATE_RELEASED, NULL, "A:./lv_res/images/home/img_cogwheel_argb.sjpg", NULL);
直接 LVGL 集成的解码器直接使用外部的 jpg、png、bim图片
这里比较简单了,上面中已经演示了使用方式,开启外部文件使用后,直接加载图片名称即可,如下所示lv_imgbtn_set_src(img_btn, LV_IMGBTN_STATE_RELEASED, NULL, "A:./lv_res/images/home/img_cogwheel_argb.png", NULL);
注意:在使用外部图片时,连续加载图片时会很慢,这个是因为没有打开对应的图片缓存机制,每次使用时都是通过解析器进行解析,所以速度比较慢。
直接打开#define LV_IMG_CACHE_DEF_SIZE 1宏即可,但是这个操作会消耗内存控件,此操作对于方式1来说是没有意义的。
注意:在更改头文件的宏时,最好清除一下工程从新编译,不然可能出现各种奇怪的问题。笔记到此结束,有写的不好的地方望各位大佬指出。
参考链接
JPG decoder(JPG解码器):http://lvgl.100ask.net/8.1/libs/sjpg.html
ESP32开发学习 LVGL Littlevgl 解码显示JPG图片三种方式:https://blog.csdn.net/cnicfhnui/article/details/119377567
LVGL 中图片使用问题的更多相关文章
- iOS 解决LaunchScreen中图片加载黑屏问题
iOS 解决LaunchScreen中图片加载黑屏问题 原文: http://blog.csdn.net/chengkaizone/article/details/50478045 iOS 解决Lau ...
- div+css:div中图片垂直居中
div中图片垂直居中 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...
- iOS相册中图片按照时间排序
ios相册默认是按照时间从过去到现在排列,图片顺序有正序和逆序,group可以用以下方法来选择顺序 /** @param NSIndexSet 需要获取的相册中图片范围 @param NSEnumer ...
- js获取页面中图片的总数
查看效果:http://keleyi.com/keleyi/phtml/image/9.htm 下面是完整代码: <html><body><div id="ke ...
- 关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析
原文:关于Android中图片大小.内存占用与drawable文件夹关系的研究与分析 相关: Android drawable微技巧,你所不知道的drawable的那些细节 经常会有朋友问我这个问题: ...
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...
- IOS中图片拉伸技巧与方法总结(转载)
以下内容转载自:http://my.oschina.net/u/2340880/blog/403996 IOS中图片拉伸技巧与方法总结 一.了解几个图像拉伸的函数和方法 1.直接拉伸法 简单暴力,却是 ...
- PHP限制HTML内容中图片必须是本站的方法
本文实例讲述了PHP限制HTML内容中图片必须是本站的方法.分享给大家供大家参考.具体实现方法如下: 1. PHP代码如下: <?php $dom = new DOMDocument; $dom ...
- php获取网页中图片并保存到本地
php获取网页中图片并保存到本地的代码,将网页中图片保存本地文件夹: save_img("http://www.jbxue.com" ?>
- KSImageNamed-Xcode-master 对项目中图片提供自动提示功能的插件
.使用介绍: (1)KSImageNamed-Xcode-master的使用 安装该插件后,会对文件中图片进行智能提示. 下载地址:http://yun.baidu.com/s/1qWNkvGK
随机推荐
- vulnhub靶场之EMPIRE
准备: 攻击机:虚拟机kali.本机win10. 靶机:EMPIRE: BREAKOUT,地址我这里设置的桥接,下载地址:https://download.vulnhub.com/empire/02- ...
- 认识 Redis client-output-buffer-limit 参数与源码分析
概述 Redis 的 client-output-buffer-limit 可以用来强制断开无法足够快从 redis 服务器端读取数据的客户端.保护机制规则如下: [hard limit] 大小限制, ...
- Codeforces Round #816 (Div. 2)/CodeForces1715
CodeForces1715 Crossmarket 解析: 题目大意 有一个 \(n \times m\) 的空间,Stanley 需要从左上角到右下角:Megan 则需要从左下角到右上角.两人可以 ...
- 3.版本穿梭&分支概述
版本穿梭 如果我们提交了多个版本到本地仓库,想将工作区恢复到历史版本 可以先使用git reflog查看历史记录,获取到版本号 然后使用git rest --hard 版本号 命令恢复到指定版本 gi ...
- .Net 文件导出下载
//1.首先要有文件路径 2.要知道文件扩展名 3.根据扩展名在Provider Map对应的contentType 4.return FileSteam public IActionResult E ...
- Pictionary 方法记录
[COCI2017-2018#5] Pictionary 题面翻译 题目描述 在宇宙一个不为人知的地方,有一个星球,上面有一个国家,只有数学家居住. 在这个国家有\(n\)个数学家,有趣的是,每个数学 ...
- numpy常用知识点备忘
常用函数 a.max(axis=0) a.max(axis=1) a.argmax(axis=1) : 每列的最大值(在行方向找最大值).每行的最大值(在列方向找对大致).最大值的坐标 sum()求和 ...
- ModuleNotFoundError: No module named 'XXX'
先来一张表情包: pycharm在小黑框使用pip安装某个包,在解释器没有找到某个包,所以运行程序的时候总是报错. 我相信大家可能都遇到这样的问题. 我下载有3.8.3.10版本的python,我py ...
- Day09:switch——case结构的使用详解
switch--case结构的使用详解 什么是switch--case结构 他也是一种多选择结构 switch--case结构是类于if--else的语法,通过比较而输出对应的内容: 通俗的讲,好比我 ...
- elasticsearch聚合之bucket terms聚合
目录 1. 背景 2. 前置条件 2.1 创建索引 2.2 准备数据 3. 各种聚合 3.1 统计人数最多的2个省 3.1.1 dsl 3.1.2 运行结果 3.2 统计人数最少的2个省 3.2.1 ...