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文件首部前面添加以下源码:
#if defined (__CC_ARM)
#pragmaanon_unions
#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