一、图片存储

我们可以将图像存储在两个位置

  • 作为内部存储器(RAM或ROM)中的变量
  • 作为文件

图片以文件的形式存储在文件系中(比如SD),需要打开LVGL的文件操作的功能(打开,读取,关闭等)。虽然以文件的形式存储时,在绘制图形之前必须将其读取到RAM中,不像变量那样对资源友好,但是更容易替换,而无需重新编译主程序。

这里主要分析以变量的形式进行存储。

二、图像变量

图像的变量如下所示:

uint8_t my_img_data[] = {0x00, 0x01, 0x02, ...};

static lv_img_dsc_t my_img_dsc = {
.header.always_zero = 0,
.header.w = 80,
.header.h = 60,
.data_size = 80 * 60 * LV_COLOR_DEPTH / 8,
.header.cf = LV_IMG_CF_TRUE_COLOR, /*设置颜色格式*/
.data = my_img_data,
};
  1. header.always_zero: 它是第一个字节的高位。始终为零

  2. header.w: 宽度(以像素为单位)(<= 2048)

  3. header.h: 高度(以像素为单位)(<= 2048)

  4. header.reserved: 保留供以后使用

  5. header.cf: 是颜色格式(详细稍后分析)

    • LV_IMG_CF_TRUE_COLOR 只需存储RGB颜色(使用LVGL配置的任何颜色深度)。
    • LV_IMG_CF_TRUE_COLOR_ALPHA 与LV_IMG_CF_TRUE_COLOR类似,但它还会为每个像素添加一个alpha(透明度)字节。
    • LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED 与LV_IMG_CF_TRUE_COLOR类似,但是如果像素具有LV_COLOR_TRANSP(在 lv_conf.h中设置)颜色,则该像素将是透明的。
    • LV_IMG_CF_INDEXED_1/2/4/8BIT 使用2、4、16或256色调色板,并以1、2、4或8位存储每个像素。
    • LV_IMG_CF_ALPHA_1/2/4/8BIT 仅将Alpha值存储在1、2、4或8位上。 像素采用style.image.color和设置的不透明度的颜色。源图像必须是Alpha通道。这对于类似于字体的位图是理想的(整个图像是一种颜色,但是您希望能够更改它)。

6 data: 指向图像数据的指针

三、颜色格式

LV_IMG_CF_TRUE_COLOR图像的字节按以下顺序存储。

  1. 对于32位色深:

    • Byte 0: 蓝色(Blue)
    • Byte 1: 绿色(Green)
    • Byte 2: 红色(Red)
    • Byte 3: 透明度(Alpha)
  2. 对于16位色深:

    • Byte 0: 绿色(Green )3位低位,蓝色(Blue)5位
    • Byte 1: 红色(Red)5位,绿色(Green )3位
    • Byte 2: 透明度(Alpha)字节(仅适用于LV_IMG_CF_TRUE_COLOR_ALPHA)
  3. 对于8位色深:

    • Byte 0: 红色(Red)3位, 绿色(Green )3位, 蓝色(Blue)2位
    • Byte 2: 透明度(Alpha)字节(仅适用于 LV_IMG_CF_TRUE_COLOR_ALPHA)
  4. Raw格式:

    我们可以将图像以Raw格式存储,以指示它不是内置的颜色格式,并且需要使用外部Image解码器来解码图像。

    • LV_IMG_CF_RAW 表示基本的原始图像(例如PNG或JPG图像)。
    • LV_IMG_CF_RAW_ALPHA 表示图像具有Alpha,并且为每个像素添加了Alpha字节。
    • LV_IMG_CF_RAW_CHROME_KEYED 表示该图像已按chrome键锁定,如上文LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED中所述。

四、添加图像

了解完上面图像变化后,添加图像就比较简单了,这里有两种方式

  • 手动创建图像

    根据上面的图像变量和颜色格式变可以创建一张新的图像,像是这样操作就比较麻烦了

  • 图片生成变量

    这样就比较简单了,可以使用LVGL官方提供的在线转换器,直接将图片转换成图像变量,便可直接导入程序中使用

图像转换

  1. 在线转换器

    LVGL 在线转换器:https://lvgl.io/tools/imageconverter

  2. 将图像转为.c文件

  3. 将生成的.c文件拷贝到工程中

五、图片使用

在使用图片之前,需要使用LV_IMG_DECLARE对图片进行声明

LV_IMG_DECLARE(img_test);

测试程序

#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif LV_IMG_DECLARE(img_test); void lvgl_gui_test(void)
{
lv_obj_t * img1 = lv_img_create(lv_scr_act());
lv_img_set_src(img1, &img_test);
lv_obj_align(img1, LV_ALIGN_CENTER, 0, 0);
lv_obj_set_size(img1, 80, 40);
}

LVGL 显示图片的更多相关文章

  1. LVGL 中图片使用问题

    此笔记主要是记录在 LVGL 中使用图片的几种方式,以及使用过程中遇到的问题.最近在 ARM linux 中使用 LVGL 时,发现加载图片变得很卡,一开始还好,当连续加载的图片变多后,特别是动画的过 ...

  2. img只显示图片一部分 或 css设置背景图片只显示图片指定区域

    17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...

  3. python将图片转换为Framebuffer裸数据格式(终端显示图片)

    要在ubuntu终端显示图片或者在板子的LCD显示图片,Framebuffer是一个简单易用的接口,直接写入像素信息即可. 但普通的图片带有头部信息或者编码格式不同,直接送入Framebuffer是显 ...

  4. Chrome 控制台新玩法-console显示图片以及为文字加样式

    有兴趣的同学可以文章最后的代码复制贴到控制台玩玩. Go for Code 在正常模式下,一般只能向console 控制台输出简单的文字信息.但为了把信息输出得更优雅更便于阅读,除了cosole.lo ...

  5. 如何使用SOIL在VS2012的 C++环境下显示图片

    先看下效果. 这是一个很无聊的功能....首先说下,我做这个功能的初衷并不是为了实现在控制台中显示图片...(这貌似很无聊) 而是因为自己想做用C做一个游戏:http://q.cnblogs.com/ ...

  6. Qt自适应大小显示图片,添加菜单

    由于后面的图像处理需要UI,OpenCV自带也不怎么会,MFC实在懒得学的.听同学说Qt不错,就用Qt做UI了. 本文主要介绍三个内容:在Qt Creator中使用OpenCV2.Qt中自适应显示图片 ...

  7. EmguCV控件Emgu.CV.UI.ImageBox及C# picturebox显示图片连续刷新出现闪烁问题

    在上一篇里,EmguCV(OpenCV)实现高效显示汉字及叠加  实现了视频叠加及显示,但存在问题,就是 Emgu.CV.UI.ImageBox及C# picturebox显示图片时都会出现闪烁,尤其 ...

  8. 显示图片的(自定义)吐司Toast

    一般我们提示的时候都是直接提示文字的,其实Toast也可以显示图片 常用方法 Toast.makeText(context,text,duration)这返回一个Toast对象 toast.setDu ...

  9. python 读取并显示图片的两种方法

    在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. ...

  10. 【OpenCV练习】简单显示图片的代码

    今天依照网上的教程尝试了一下最基本的图片显示. 首先想说一下编译时出现的问题,开始时在编译时会出现无法识别cvReleaseImage的情况,是因为没有在配置中包含相应的core的库文件. 加进去就解 ...

随机推荐

  1. R语言数据质量分析

    数据质量分析是数据预处理的前提,也是数据分析结论有效性和准确性的基础. 数据质量分析的主要任务是检查原始数据中是否存在脏数据. 脏数据一般包括: 缺失值分析 缺失值产生的原因.影响 原因: 部分信息难 ...

  2. Clang Preprocessor 类的创建

    参考: Create a working compiler with the LLVM framework, Part 2 How to parse C programs with Clang: A ...

  3. 什么是GRAY色彩空间

    GRAY色彩空间通常指的是灰度图像,灰度图像是一种每个像素都是从黑到白,被处理为256个灰度级别的单色图像.这256个灰度级别分别用区间[0,255]中的数值表示,其中,"0"表示 ...

  4. Oracle regexp_replace 手机号脱敏

    select '18012345678',regexp_replace('18012345678','(.){4}','****',4,1) from dual;

  5. KingbaseES Json 系列六:Json记录操作函数一

    KingbaseES Json 系列六--Json记录操作函数一(JSONB_TO_RECORD,JSONB_TO_RECORDSET,JSON_TO_RECORD,JSON_TO_RECORDSET ...

  6. KingabseES-SQL优化_提升子查询

    什么是提升子查询/子链接 SubLink,子查询/子链接,他们的区别:子查询不在表达式中子句,子链接在in/exists表达式中的子句. 若以范围表的方式存在,则是子查询: 若以表达式的存在,则是子连 ...

  7. Java对象序列化和反序列化

    Java类的序列化和反序列化 序列化:指将对象转换为字节序列的过程,也就是将对象的信息转换成文件保存. 反序列化:将字节序列转换成目标对象的过程,也就是读取文件,并转换为对象. 几个关键点: 必须实现 ...

  8. 面试连环炮系列(二十六):什么情况下JVM频繁发生full GC

    1. 什么情况下JVM频繁发生full GC? full gc触发条件是老年代空间不足,具体原因有四个: 系统并发高.执行耗时长或者创建对象过多,导致 young gc频繁,且gc后存活对象太多,但是 ...

  9. 高并发场景QPS等专业指标揭秘大全与调优实战

    高并发场景QPS等专业指标揭秘大全与调优实战 最近经常有小伙伴问及高并发场景下QPS的一些问题,特意结合项目经验和网上技术贴做了一些整理和归纳,供大家参考交流. 一.一直再说高并发,多少QPS才算高并 ...

  10. nginx重新整理——————开篇[一]

    前言 因为整理http协议,顺便把nginx 整理了. 正文 主要作用: 正向代理 反向代理(负载均衡.缓存等) 静态资源 nginx 的优点: 适合高并发,一个进程可以处理很多的请求. 扩展性强,有 ...