无法使用lvgl显示ezip或者lvgl转换的bin

想使用lvgl做一个类似相册的应用,但是图片无论是使用lvgl官方转换成565的bin,还是使用思澈的工具转换为ezip的bin都无法显示,如果直接使用C文件倒是可以正常显示

显示关键部分代码如下

void image_show_update_image_bin(const void *bin_data)
{
    lv_img_set_src(main_obj->img, bin_data);
    lv_img_header_t header;
    lv_res_t res = lv_img_decoder_get_info(bin_data, &header);

    if (res == LV_RES_OK)
    {
        printf("Image width: %d\n", header.w);
        printf("Image height: %d\n", header.h);
        printf("Color format: %d\n", header.cf);
    }
    else
    {
        printf("Failed to get image info\n");
    }

}

使用ezip 的cmd命令如下

E:\Users\chen\Pictures\bmp\sdcard\Bin\1>ezip -convert 45.png -rgb565 -binfile 2 -lvgl_version 8
ezip version: 2.3.4_2025_07_04 Support_c_file

------------- ezip convert begin: ezip -convert 45.png color RGB565 -------------
next file:C:pictures/45.bin
Failed to get image info
Failed to get image info是上面代码打印的,这个是ezip的直接无法解析
prev file:C:pictures/test.bin
Image width: 355
Image height: 502
Color format: 4
这个是使用lvgl官方工具生成的565 true colour,能识别到bin类型,但是显示就是一片黑

无论如何都不能显示,不知道是哪里出了问题

我看你是生成了bin文件,我用agif例程改过。把png生成bin文件放在文件系统内,然后用lvgl显示出来。可以参考这个链接的第二个附件。相关代码如下:

你的sdk是日期是什么时候的

如果你用的是lvgl8的话,ezip图片路径就不加驱动器号,如果是lvgl9可能会需要更新一下sdk

我查看了我的版本是v2.4.0,此外我也尝试了使用去掉驱动器盘符,确实开始读取了,不知道哪里宏没配置好,直接崩溃了,但是我还不明白,为什么使用lvgl的工具生成的bin,能够解析文件大小格式,但是无法显示

报错如下

[509297] E/drv.epic main: print_gpu_error_info
[509317] E/drv.epic main: Epic not ready 2, HW busy =1, ErrorCode 0
[509345] E/drv.epic main: EOF IRQ=0, MASK=1
[509363] E/drv.epic main: VL SRC 200791f8, x0y0x1y1[0,0,409,16]
[509390] E/drv.epic main: L2 SRC 0, x0y0x1y1[0,0,409,16]
[509413] E/drv.epic main: 0 is Ezip(0:VL 1:L0 2:L1 3:L2)
[509436] E/drv.epic main: Ezip not ready 4, HW busy=0, ErrorCode 10h
[509465] E/drv.epic main: Ezip not open
[509481] E/drv.epic main: epic_op_history cur=1
[509501] E/drv.epic main: hist[1]
[509515] E/drv.epic main: EPIC_OP_BLENDING_EX   layer_num=2
[509540] E/drv.epic main: #0 cf=0x0,data=0x20020588,total_w=460,area[x0y0(0,300),x1y1(459,399)] frac[0,0]
[509583] E/drv.epic main: color_en=0, rgb[0,0,0], ax=0, L8_tab=0x0, data_size=0x16760
[509617] E/drv.epic main: angle=0,scale_xy=1024,1024, pivot_xy=0,0, mirror_hv=0,0
[509651] E/drv.epic main: alpha=255 

[509667] E/drv.epic main: #1 cf=0x81,data=0x200791f8,total_w=410,area[x0y0(25,362),x1y1(434,863)] frac[0,0]
[509711] E/drv.epic main: color_en=0, rgb[0,0,0], ax=0, L8_tab=0x0, data_size=0x0
[509744] E/drv.epic main: angle=0,scale_xy=1024,1024, pivot_xy=205,251, mirror_hv=0,0
[509778] E/drv.epic main: alpha=255 

[509795] E/drv.epic main: output cf=0x0,data=0x20033002,total_w=460,area[x0y0(25,383),x1y1(434,399)] frac[0,0]
[509839] E/drv.epic main: color_en=0, rgb[0,0,0], ax=0, L8_tab=0x0, data_size=0x3d18
[509874] E/drv.epic main: wait_gpu_done timeout(-2)? err=-2
Assertion failed at function:wait_gpu_done, line number:788 ,(0)

把这个日志打开再看看还有没有什么信息

prev file:C:pictures/test.bin
new path:pictures/test.bin
[Warn]  (28.989, +39)    file_decoder_info: Cannot open: C:pictures/test.bin
        (in lvsf_img_decoder.c line #179)
[Warn]  (28.991, +2)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (28.992, +1)     epic_cf_decoder_info: Image get info found unknown src type    (in lvsf_img_decoder.c line #56)
Image width: 355
Image height: 502
Color format: 4
[Warn]  (29.010, +18)    lv_draw_sw_layer_create: Rendering this widget needs LV_COLOR_SCREEN_TRANSP 1  (in lv_draw_sw_layer.c lin[Warn]        (29.011, +1)     refr_obj: Couldn't create a new layer context  (in lv_refr.c line #1241)
[Warn]  (29.015, +4)     file_decoder_info: Src type is wrong: 0
        (in lvsf_img_decoder.c line #185)
[Warn]  (29.016, +1)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (29.019, +3)     file_decoder_info: Src type is wrong: 0
        (in lvsf_img_decoder.c line #185)
[Warn]  (29.020, +1)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (29.023, +3)     file_decoder_info: Src type is wrong: 0
        (in lvsf_img_decoder.c line #185)
[Warn]  (29.024, +1)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (29.027, +3)     file_decoder_info: Src type is wrong: 0
        (in lvsf_img_decoder.c line #185)
[Warn]  (29.028, +1)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (29.033, +5)     file_decoder_info: Src type is wrong: 0
        (in lvsf_img_decoder.c line #185)
[Warn]  (29.034, +1)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (29.039, +5)     file_decoder_info: Src type is wrong: 0
        (in lvsf_img_decoder.c line #185)
[Warn]  (29.040, +1)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (29.042, +2)     file_decoder_info: Src type is wrong: 0
        (in lvsf_img_decoder.c line #185)
[Warn]  (29.044, +2)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (29.047, +3)     file_decoder_info: Src type is wrong: 0
        (in lvsf_img_decoder.c line #185)
[Warn]  (29.048, +1)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (29.052, +4)     file_decoder_info: Src type is wrong: 0
        (in lvsf_img_decoder.c line #185)
[Warn]  (29.053, +1)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (29.055, +2)     file_decoder_info: Src type is wrong: 0
        (in lvsf_img_decoder.c line #185)
[Warn]  (29.056, +1)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (29.059, +3)     file_decoder_info: Src type is wrong: 0
        (in lvsf_img_decoder.c line #185)
[Warn]  (29.060, +1)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (29.063, +3)     file_decoder_info: Src type is wrong: 0
        (in lvsf_img_decoder.c line #185)
[Warn]  (29.064, +1)     file_decoder_info: Image get info found unknown src type       (in lvsf_img_decoder.c line #191)
[Warn]  (29.067, +3)     lv_draw_sw_layer_create: Rendering this widget needs LV_COLOR_SCREEN_TRANSP 1  (in lv_draw_sw_layer.c line[Warn]       (29.069, +2)     refr_obj: Couldn't create a new layer context  (in lv_refr.c line #1241)
ch[0]voltage=20607;
[970654] E/drv.epic main: print_gpu_error_info
[970674] E/drv.epic main: Epic not ready 2, HW busy =1, ErrorCode 0
[970702] E/drv.epic main: EOF IRQ=0, MASK=1
[970721] E/drv.epic main: VL SRC 200c2196, x0y0x1y1[0,0,354,59]
[970747] E/drv.epic main: L2 SRC 0, x0y0x1y1[0,0,354,59]
[970771] E/drv.epic main: Ezip is ready
[970788] E/drv.epic main: epic_op_history cur=3
[970807] E/drv.epic main: hist[3]
[970822] E/drv.epic main: EPIC_OP_BLENDING_EX   layer_num=2
[970847] E/drv.epic main: #0 cf=0x0,data=0x20020588,total_w=460,area[x0y0(0,400),x1y1(459,459)] frac[0,0]
[970890] E/drv.epic main: color_en=0, rgb[0,0,0], ax=0, L8_tab=0x0, data_size=0xd7a0
[970925] E/drv.epic main: angle=0,scale_xy=1024,1024, pivot_xy=0,0, mirror_hv=0,0
[970958] E/drv.epic main: alpha=255 

[970975] E/drv.epic main: #1 cf=0x0,data=0x200791f8,total_w=355,area[x0y0(53,-21),x1y1(407,480)] frac[0,0]
[971018] E/drv.epic main: color_en=0, rgb[0,0,0], ax=0, L8_tab=0x0, data_size=0x0
[971051] E/drv.epic main: angle=0,scale_xy=1024,1024, pivot_xy=177,251, mirror_hv=0,0
[971086] E/drv.epic main: alpha=255 

[971102] E/drv.epic main: output cf=0x0,data=0x200205f2,total_w=460,area[x0y0(53,400),x1y1(407,459)] frac[0,0]
[971147] E/drv.epic main: color_en=0, rgb[0,0,0], ax=0, L8_tab=0x0, data_size=0xd7a0
[971181] E/drv.epic main: wait_gpu_done timeout(-2)? err=-2
Assertion failed at function:wait_gpu_done, line number:788 ,(0)
Previous ISR enable 0


报错文件长这样,是不是我没开这个宏导致的,但是如果我打开会导致报错找不到一个app_mem.h文件,虽然上面有个好人给我提供的包里有这份头文件,但是添加了还会报其他宏错误

跟这个宏没什么关系,先测试一下是哪个文件导致错误的?

你是说测试一下代码上什么地方导致ezip报错吗

我看你这个日志上引起死机的应该是lvgl官方工具生成的那个,不知道是不是被错误识别成了特殊格式。方便提供工程代码和图片分析一下吗?

test.bin (244.7 KB)

ST07_sf32_SDcard_image_show.7z (7.0 MB)

提供了一个最简单的demo,和一个我生成的ezip.bin,文件是放置在sd卡根目录的photos/下面,使用的开发板的是类似黄山派的官方开发板,劳烦帮忙看一下

你这个图片是放置在sd卡中吗

能抽空帮我看一下吗,这个问题我确实不知道是什么原因,或者有能直接运行显示SD卡图片的demo也行

LVGL v8官方Example - SiFli SDK编程指南 文档
LVGL v9官方Example - SiFli SDK编程指南 文档

这两个例程都可以实现运行显示SD卡图片,menuconfig开启相关配置后修改src/main.c中的代码调用对应函数编译下载后可使用

你现在还能提供一下生成test.bin时使用的指令吗

example_v8.ezip (163.1 KB)或者试一下我提供的图片能不能正常工作

./ezip -convert ./gril.png -rgb565 -binfile 2 -lvgl_version 8
ezip version: 2.3.4_2025_07_04 Support_c_file

------------- ezip convert begin: ezip -convert ./gril.png color RGB565 -------------

---------------------------------------- ezip convert end !!! --------------------------------------
这个是我下午测试用的指令,大概上是这么写的,我试试你提供的文件

昨天下午测试了,demo确实可以使用sjpg格式,感谢提供支持,不过这个刷新速度有些慢,如果是ezip的有相关的示例吗,我看到这里面的ezip示例是C文件

你的sdk更新一下应该就行,ezip最近有过更改,旧的版本使用norflash的话没法处理其他介质上的ezip文件

或者我给你个文件替换一下sdk/middleware/lvgl/lv_drivers

lvsf_img_decoder.c (11.5 KB)