2572|4

400

帖子

9

TA的资源

纯净的硅(初级)

楼主
 

在BL808上使用lvgl显示图片 [复制链接]

 

首先准备一张背景透明的png格式图片,目标是把让屏幕显示这张图片

 

为此,在lvgl_demo例程中增加如下代码:

 

并使用lv_test_pic_1();替换掉lv_demo_benchmark();

接下来就是准备lionking数组了。

  • 将图片转成数组

https://lvgl.io/tools/imageconverter上转换图片文件

 

转换前图片大小27kbytes,转换后的文件大小为1.88Mbytes,显然不太适合在开发板上使用,但仍然可以编译成功。效果如下:

 

可以看到图片的背景并不是透明色。

二、修改图片转换格式

 

转换后的文件大小176kbytes,比之前小上不少,但比原图还是要大很多。

显示为

 

根据网上的说法,一般是内存不足导致的该问题。那么我们针对内存不足,考虑如何解决:

1、颜色深度

从“M1s_BL808_SDK/components/lvgl/lvgl/lv_conf.h”可以看到定义显示的颜色深度是

 

而在“M1s_BL808_SDK/components/platform/soc/bl808/bl808_std/BSP_Common/lcd/lcd.h”中可以看到,LCD_COLOR_DEPTH来自与st7789v_spi.h文件。

 

在这个文件中,颜色定义为16位

 

用16机制方式打开提前准备好的的lionking图片

 

从前8个字节可以看到这是一个标准的PNG图片,在第0x0c~0xf找到IHDR,查看文件头数据块相关信息,其长度为0x0d(在0x0b位置)。

图片大小200(0xc8)*183(0xb7)。

图像深度8(在0x18位置),也就是说这是一个256色图像。

颜色类型6(在0x19位置),为带α通道数据的真彩图像。

从这样看来,屏幕显示颜色多过图片本身的颜色,想通过图像本身来说减色压缩不容易。

 

继续查看lvgl_conf.h,可以看到内存分配

 

预分配给LV使用的内存只有48kbytes,似乎的确比我们图片要小。

接下来有两种方式:

1、改大分配的内存,比如改成1024U * 1024U

2、该内存分配模式,比如改成#define LV_MEM_CUSTOM 1

修改后,正常显示如下:

 

三、直接使用原图

在main.c中增加fs路径访问头文件和相应初始化:

 

 

在lvgl_conf.h中开启允许本地路径,

#define LV_USE_FS_FATFS 1

开启

另外,还需要修改编译参数:

“M1s_BL808_SDK/components/lvgl/bouffalo.mk”

增加

 

 

可以编译通过,但显示不出来图片,推测是文件路径问题导致,大约是需要初始化SD卡一类的。既然不知道原因,暂且放过。

 

另:因为涉及到图片,尝试过编译超过1Mbytes的代码,会出现:

section `.text' will not fit in region `code_memory'和region `code_memory' overflowed错误。

尝试查看ld文件

 

对照编译参数,推测是使用

“M1s_BL808_SDK/components/platform/soc/bl808/bl808/evb/ld/bl808_flash.ld”文件作为编译参数。

打开发现的确限制存在

 

修改code_memory和相邻的ram_memory

 

可以编译成功,但是不能执行。。。

 

 

最新回复

谢谢,我学习一下,请多指教。   详情 回复 发表于 2023-1-4 07:35
点赞 关注
 
 

回复
举报

7159

帖子

2

TA的资源

版主

沙发
 

你这显示个图片猜了这么多的坑。。。主要是透明图片不好显示。

 
 
 

回复

6960

帖子

11

TA的资源

版主

板凳
 
学习一下lvgl,最近也想移植,难度如何?

点评

不难,主要是三个接口需要自己写: lv_port_disp_init();显示接口 lv_port_indev_init();输入接口 lv_port_fs_init();文件访问接口  详情 回复 发表于 2023-1-4 02:42
 
 
 

回复

400

帖子

9

TA的资源

纯净的硅(初级)

4
 
lugl4313820 发表于 2023-1-3 10:05 学习一下lvgl,最近也想移植,难度如何?

不难,主要是三个接口需要自己写:

lv_port_disp_init();显示接口

lv_port_indev_init();输入接口

lv_port_fs_init();文件访问接口

点评

谢谢,我学习一下,请多指教。  详情 回复 发表于 2023-1-4 07:35
 
 
 

回复

6960

帖子

11

TA的资源

版主

5
 
tobot 发表于 2023-1-4 02:42 不难,主要是三个接口需要自己写: lv_port_disp_init();显示接口 lv_port_indev_init();输入接口 ...

谢谢,我学习一下,请多指教。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
uCOS2精华快速掌握

10881

【TI原创】在任何上网的机器监测LM3S8962的温度

这个程序利用花生壳可以在任何一台能上互联网的电脑看到家里的开发板及板子周围的温度,我刚才测了下35度,呵呵呵,还算平安,若 ...

[MSP430] 汉字字模数据结构提问

typedef struct typFNT_GB12 { char Index; //内码索引 是什么意思? uint8_t Msk; //点阵码数据大小 这个我大概知道意思 ...

拆机啦~~看看怡成5D-1血糖仪

某天趁着促销5.6包邮购入怡成5D-1血糖仪一个~当时好几个说要抢后来却没行动说估计是骗人的哼哼,我现在拆给你们看~不管是真是假 ...

msp430g2553硬件IIC

#include "msp430g2553.h" #include "uart.h" unsigned char RX_Data; void I2C_Init(unsigned char SA);//I2C初始 ...

如何快速开发单片机

本帖最后由 maowentao0416 于 2020-4-21 20:55 编辑 作为一个单片机开发的老司机,在这里告诉大家如何快速的进行单片机开发, ...

什么电路可以实现这个功能?

什么电路可以实现这个功能,2路输入信号,一路为直流+12V,一路为方波信号(偏置后,即无负信号。),2路信号共地。 输出信号为 ...

【花雕动手做】有趣好玩的音乐可视化系列小项目(05)---WS2812柱跳灯

偶然脑子发热心血来潮,想要做一个声音可视化的系列专题。这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当 ...

如何将R128的lspsram频率提高至200M?

**一、修改频率方法** 首先通过cboot0命令,跳转到boot0的代码中,路径为: ${root_dir}/lichee/brandy-2.0/spl/ 找到l ...

提到电源仿真软件,越不过去的人

电源仿真软件是工程师们设计和验证电路的重要工具,小伙伴们,你们都用过哪些仿真软件呢??? LTspice、PSpice、SIMPLIS、SI ...

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表