显示TF卡显示JPG图片问题

  • 黄山派
  • LVGL_V8
  • 例程参考:lvgl_v8_examples 显示TF卡图片例程

我想根据例程写一个循环显示TF卡内JPG图片的小工程,但是目前碰到的问题是循环显示只能显示出第一张图片吗,其他图片显示NO data【后面有图】。单独编译显示每张图片都是可行的。看了下说可能是缓存未释放导致的,但是试了几种方式都不行,有没有可行的解决方式?
LOG显示都正常,没有报错,程序运行正常,只是除第一张显示图片外都显示No data.

TF_JPG_display_t jpg_display;   // JPG显示结构体

void TF_JPG_display(void *parameter)
{   
    jpg_display.img_obj = lv_img_create(lv_scr_act());
    while (1)
    {
        for(int i = 5; i >= 1; i--) 
        {

            // // 先清理之前的图片资源
            // lv_img_cache_invalidate_src(jpg_display.img_obj);
           //jpg_display = NULL;
            /* Assuming a File system is attached to letter 'A'
            * E.g. set LV_USE_FS_STDIO 'A' in lv_conf.h */

            rt_snprintf(jpg_display.file_path, sizeof(jpg_display.file_path), 
                        "A:/picture/%d.jpg",
                            i);
            
            lv_img_set_src(jpg_display.img_obj, jpg_display.file_path);

            
            const void * src = lv_img_get_src(jpg_display.img_obj);
            lv_img_decoder_get_info(src, &jpg_display.img_header);

            lv_coord_t width = jpg_display.img_header.w;
            lv_coord_t height = jpg_display.img_header.h;

            lv_obj_set_pos(jpg_display.img_obj, (LCD_WIDTH - width) / 2 , (LCD_HEIGHT - height) / 2); // 居中显示

            rt_thread_mdelay(2000);
        }
    }
}

:neutral_face: 可能是缓冲区不够?把CONFIG_LV_IMG_CACHE_DEF_SIZE设置小一些看看,我设置显示png组成的动图都可以

好像不是这个问题,原来是16,改小成8或者改大成32都是一样只显示第一张图,改成0就是一张图都不显示。

可以提供工程代码分析一下吗,代码片段的信息量太少了。

lvgl_v8.zip (510.2 KB)
我上传了一个压缩包,里面有相关代码文件,assert应该没什么用,例程是基于电子罗盘的,TF卡内的图片存储在根目录picture文件夹下,命名未TF_1.jpg ,一共5张

v8对jpg解码的处理是整张解码在内存里面的,v9是只解码需要的部分,你可以换到v9试试。

我也想整动图,可以看看你的代码吗?:drooling_face:

:confused: 我看跟你的差不多,试试CONFIG_LV_IMG_CACHE_DEF_SIZE改成2-4试试,或者图片弄小一些,都可以显示一张,配置肯定没问题了的

切换到lvgl_v9确实可以使用了,能够达成循环显示的效果。