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
随机推荐
- paddle&蜜度 文本智能较对大赛经验分享(17/685)
引言 我之前参加了一个中文文本智能校对大赛,拿了17名,虽然没什么奖金但好歹也是自己solo拿的第一个比较好的名次吧,期间也学到了一些BERT应用的新视角和新的预训练方法,感觉还挺有趣的,所以在这里记 ...
- 齐博x1关于小程序个性源代码的说明
系统默认推荐商家小程序使用通用型的源码,即框架套壳iframe形式的.这个灵活性更高.但如果有特殊需求的话,也可以设置个性源码,比如配合uni-app使用,针对不同的小程序就使用不同的uni-app风 ...
- 19.-哈希算法&注册登录
一.哈希算法 哈希: 给定明文-计算出一段定长的-不可逆的值 定长输出:不管明文输入多少,哈希都是定长的 不可逆:无法反向计算出对应的明文 雪崩效应:输入改变,输出必然变 md5:32位16进制 ...
- 三十四、kubernetes证书介绍
Kubernetes 证书介绍 一.证书机制说明 Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务.API Server 是集群内部各个组件通信的中介,也是外部控 ...
- 51单片机-独立按键控制led矩阵的左移和右移
51单片机学习 独立按键 控制led灯光矩阵的左移和右移 开发板采用的是普中的A2学习开发板,具体的代码如下: typedef unsigned int u16; void delay(u16 tim ...
- perl 通过<<和文件句柄将数据写入到文件中去
可以通过文件句柄和<<运算符将文件内容写入到文件中去 #!usr/bin/perl -W use strict; use Spreadsheet::ParseExcel; use utf8 ...
- go mod常用命令 已经 常见问题
最近接触到go mod,网上查了查资料,这里记录一下. 1 介绍 1.1.go mod是什么 go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地 ...
- 5种典型 API 攻击及预防建议
API 帮助跨多个设备互连多个应用程序或软件系统,定义它们可以发出的调用或请求的种类.调用的方式.应使用的数据格式以及应遵守的约定.API 已经发展成为重要的互连,支持不同应用程序架构之间的通信,促进 ...
- 【第7篇】AI语音交互原理介绍
本章主要介绍AI语音交互的原理,包括语音交互的流程以及各流程节点所涉及的相关知识,如语音采集.语音识别.自然语言处理.语音合成等. 2.1 AI语音交互 AI语音交互通俗点说就是人与机器间进行语音理解 ...
- 关于python路径的问题思考
我相信你肯定遇到过这样的报错 Traceback (most recent call last): File "main.py", line 549, in <module& ...