阿里兄 发表于 2020-10-28 17:41:34

Lvgl之图片bin格式显示方法

本帖最后由 阿里兄 于 2020-10-28 17:43 编辑

Lvgl之图片bin格式显示方法



1、使用LvglImgTool转换一个bin格式的图片文件。

2、加载bin文件到SDRAM或SRAM中,如没有大内存无法使用bin格式图片。

3、为方便测试,图片bin文件为方便测试已使用bin2c转成数组了,实际项目需读取到SDRAM中。


4、申请一个lv_img_dsc_t图片变量,然后直接填充变量的内容即可,直接上代码如下。
#include "lvgl/lvgl.h"


const unsigned char _aclanbogini;//图片bin文件为方便测试已使用bin2c转成数组了

lv_img_dsc_t image_bin1;//申请一个图片资源变量

void lvgl_test(void)
{
    lv_img_header_t *p_hd = (lv_img_header_t*)_aclanbogini;//前面4字节就是bin格式的头信息
    image_bin1.header.cf = p_hd->cf;//设置图片的格式
    image_bin1.header.always_zero = 0;
    image_bin1.header.w = p_hd->w;//设置图片的宽
    image_bin1.header.h = p_hd->h;//设置图片的高
    image_bin1.data_size = sizeof(_aclanbogini)-sizeof(lv_img_header_t);//设置图片的数据字节大小
    image_bin1.data = &_aclanbogini;//设置图片的数据指针

    lv_obj_t *scr = lv_disp_get_scr_act(NULL);/* 获取当前屏幕 */
    lv_obj_t *image = lv_img_create(scr,NULL);/* 创建 image 控件 */
    lv_img_set_src(image,&image_bin1); /* 为控件设置图片 */
    lv_obj_align(image,NULL,LV_ALIGN_IN_TOP_MID,0,0);/* 设置控件的对齐方式,相对坐标 */
}

5、显示效果如下。





Huang0000 发表于 2020-12-3 18:33:55

图片能存在SPI Flash 读取吗,这又大概是怎样的思路

阿里兄 发表于 2020-12-4 08:52:02

Huang0000 发表于 2020-12-3 18:33
图片能存在SPI Flash 读取吗,这又大概是怎样的思路

LVGL图片显示必需是存储在能够直接寻址的介质上,如内部RAM、SDRAM或QSPI FLASH的内存映射模式才行,单纯的SPI FLASH不支持,要读取到内存中。

Huang0000 发表于 2020-12-4 11:12:36

阿里兄 发表于 2020-12-4 08:52
LVGL图片显示必需是存储在能够直接寻址的介质上,如内部RAM、SDRAM或QSPI FLASH的内存映射模式才行,单纯 ...

那这样,如果MCU本身的Flash就不够为SPI Flash中的数据开创建所需的内存空间了,这是不是就行不通了呢,我测试了一下,我定义一个数组,将SPI Flash的图片数据读取出来,编译报错空间不足。

阿里兄 发表于 2020-12-4 12:36:04

Huang0000 发表于 2020-12-4 11:12
那这样,如果MCU本身的Flash就不够为SPI Flash中的数据开创建所需的内存空间了,这是不是就行不通了呢, ...

是的,小资源的硬件建议用一下图标字体就可以了

981378640 发表于 2021-4-21 21:07:28

楼主,可有研究过LVGL加载外部的jpg和BMP图片啊,搞了好几天了,没搞出来,求指导啊

阿里兄 发表于 2021-4-21 21:14:17

981378640 发表于 2021-4-21 21:07
楼主,可有研究过LVGL加载外部的jpg和BMP图片啊,搞了好几天了,没搞出来,求指导啊 ...

没有研究过,官网好像有png的用法
页: [1]
查看完整版本: Lvgl之图片bin格式显示方法