OpenEdv-开源电子网

标题: LVGL V8 图片解码库移植! [打印本页]

作者: 正点原子运营    时间: 2021-10-16 11:40
标题: LVGL V8 图片解码库移植!
本帖最后由 正点原子运营 于 2021-11-1 10:31 编辑

以下文章摘自微信公众号——开源电子网《LVGL V8 图片解码库移植!》
更多技术文章,请扫下方二维码关注

(, 下载次数: 36)



LVGL V8 图片解码库移植


一、BMP解码库

LVGLV8读取我们的BMP图片之前,我们必须要移植BMP的解码库,该解码库可以去LVGL官方进行下载。https://github.com/lvgl/lv_lib_bmp

然后呢,我们必须准备一个已经移植好的LVGL工程,该工程具备文件系统驱动。然后把解码库移植到我们的工程中,如图所示:

(, 下载次数: 38)


其次我们打开修改lv_bmp_c文件,找到bmp_dsc_t结构体,我们修改该结构体:

(, 下载次数: 36)

在lv_bmp_c文件,找到staticlv_res_t decoder_read_line()函数,并把这个函数修改以下源码:(注意TFT的颜色深度是16位的,如果想要32位自己转换)

(, 下载次数: 32)

(, 下载次数: 48)
(, 下载次数: 38)

代码测试:


(, 下载次数: 39)

二、JPEG 解码库

接下来我们移植LVGLV8 JPEG解码库

前期的准备工作:

   ●官方下载lvgl 解码库

(https://github.com/lvgl/lv_lib_split_jpg)。

   ●具有文件系统的工程。

1.打开文件lv_sjpg.h文件,表明使用文件系统读取图片源。


(, 下载次数: 51)

2.在lv_conf.h文件,宏定义LV_BIG_ENDIAN_SYSTEM,小端模式(0)

(, 下载次数: 50)

3.如果编译工程出现以下错误:


(, 下载次数: 43)

请在lv_sjpg.h文件首部前面添加以下源码:

  1. #if  defined (__CC_ARM)

  2.      #pragmaanon_unions

  3. #endif
复制代码

4.在lv_sjpg.c中找到函数lv_fs_seek,我们编译会发现这个函数缺少第三个形参,我们在这个函数添加LV_FS_SEEK_SET,这个lv_sjpg.c文件所有的lv_fs_seek函数都要添加

5.lv_sjpg.c中找到宏定义LV_BIG_ENDIAN_SYSTEM,默认是#ifdeLV_BIG_ENDIAN_SYSTEM 修改成#ifLV_BIG_ENDIAN_SYSTEM

实战演习:

(, 下载次数: 36)

三、PNG解码库


接下来我们移植一个LVGLV8 的PNG解码库,该解码库主要读取PNG图片。

前期准备工作:

   ●在官方下载LVGL V8 PNG解码库

(https://github.com/lvgl/lv_lib_png)

   ●具有V8文件系统驱动的工程

把该解码库移植到我们工程中,如以下图所示:

(, 下载次数: 34)

然后添加PNG解码库的文件路径(自定义添加)

1.我们找到在lodepng.h文件中,定义宏定义

   LV_PNG_USE_L_FILESYSTEM:

(, 下载次数: 42)

2.V8的文件系统没有提供获取的大小的函数,所以我们需要自己编写一个获取文件大小的函数:如以下源码所示:

(, 下载次数: 41)

3.我们找到lodepng.c文件,找到lodepng_malloc()函数,把alloc()换成lv_mem_alloc(size)

4.在lodepng.c文件,找到lodepng_realloc()函数,把realloc()替换程lv_mem_realloc(ptr,new_size)

5.在lodepng.c文件,找到lodepng_free()函数,把free()替换成lv_mem_free()

6.然后在lodepng.c文件找到lodepng_file_size()函数,修改以下源码:

(, 下载次数: 54)

7.最后在lv_png.c文件中把全部free()函数替换成lv_mem_free()。


实战演习:


(, 下载次数: 44)






欢迎光临 OpenEdv-开源电子网 (http://www.openedv.com/) Powered by Discuz! X3.4