乐鑫技术交流
直播中

王英

7年用户 1348经验值
私信 关注
[问答]

在lvgl显示png为空白的问题怎么解决?

自己在psarm换了一块16m的flash,由于不会调用,只能下4m的程序,又不行加sd卡,16勉强够用。
现在的做法是,在分区表开一个区个spiffs或者LITTLEFS做文件系统保存图片,让lvgl8.3直接解码显示。现在的进度是系统搞好了,图片也上传好了,就是白屏,感觉是路径的问题,试过顺便打一个名称,lvgl日志都没有报错。搞了一周时间都没有查到什么原因,吐了,只能能问一下各位大佬了。

下面是代码分析
首先确定LITTLEFS是可以用的
fs:: File file = LITTLEFS.open("/aaa.txt", "r");
  if(!file){
    Serial.println("Failed to open file for reading");
    return;
  }
--------------------------------------------------------
const char *filepath = "/I.png";
   if (file_exists(filepath)) {
        log_d("文件 '%s' 存在252。n", filepath);
} else {
        log_d("文件 '%s' 不存在或无法访问456。n", filepath);
}

上传代码,读取txt和文件路径都是有的,感觉LITTLEFS应该是挂载上了

然后是lv_conf.h的配置
#define LV_USE_FS_POSIX 0
#if LV_USE_FS_POSIX
    #define LV_FS_POSIX_LETTER 'S'     /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
    #define LV_FS_POSIX_PATH ""         /*Set the working directory. File/directory paths will be appended to it.*/
    #define LV_FS_POSIX_CACHE_SIZE 0    /*>0 to cache this number of bytes in lv_fs_read()*/
#endif
------------------------------
#define LV_USE_FS_FATFS 1
#if LV_USE_FS_FATFS
    #define LV_FS_FATFS_LETTER 'A'     /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
    #define LV_FS_FATFS_CACHE_SIZE 0    /*>0 to cache this number of bytes in lv_fs_read()*/
#endif
---------------------------
#define LV_USE_PNG 1
这两个我都单独试过了,都不行

到图片显示这边
lv_obj_t *img_bg = lv_img_create(lv_scr_act());
  lv_img_set_src(img_bg, "A:2:I0.png");
  lv_obj_center(img_bg);
-----------------------------------------------------------------
ui->screen_4_img_2 = lv_img_create(ui->screen_4);
        lv_obj_add_flag(ui->screen_4_img_2, LV_OBJ_FLAG_CLICKABLE);
          lv_img_set_src(ui->screen_4_img_2, "A:2:I.png");
        lv_img_set_pivot(ui->screen_4_img_2, 50,50);
        lv_img_set_angle(ui->screen_4_img_2, 0);
        lv_obj_set_pos(ui->screen_4_img_2, 0, 0);
        lv_obj_set_size(ui->screen_4_img_2, 240, 240);
lv_obj_set_style_img_opa(ui->screen_4_img_2, 120, LV_PART_MAIN|LV_STATE_DEFAULT);

  lv_img_set_src(img_bg, "A:1:I.png");
  lv_img_set_src(img_bg, "A:I.png");
  lv_img_set_src(img_bg, "A:/I.png");
等都试过了,就是白屏,离谱

有没有大佬帮帮忙看看,吐了他也不报错没有日志
或者16m的现在只能用4m,有没有改变映射地址的例程
                                                                                                

回帖(1)

敷衍作笑谈

2024-7-23 17:39:01
首先,我们需要确保LVGL可以正确地读取和显示PNG图片。以下是一些建议和步骤,帮助您解决显示PNG图片为空白的问题:

1. 确保PNG图片格式正确:请检查您的PNG图片是否损坏或格式不正确。您可以尝试使用其他PNG图片,看看问题是否仍然存在。

2. 检查文件路径:确保您的文件路径正确无误。在您的代码中,您已经尝试了不同的路径,但仍然无法解决问题。请再次检查文件路径是否正确。

3. 确保LVGL支持PNG解码:请确保您的LVGL库支持PNG解码。您可以查看LVGL的文档,了解如何启用PNG解码功能。

4. 检查LVGL的PNG解码器:确保您的PNG解码器正确地集成到LVGL中。您可以查看LVGL的示例代码,了解如何正确地使用PNG解码器。

5. 检查LVGL的显示设置:请确保您的LVGL显示设置正确。例如,确保您的显示缓冲区大小足够大,以容纳PNG图片。

6. 使用LVGL的日志系统:您可以启用LVGL的日志系统,以便在出现问题时获得更多信息。这可以帮助您确定问题所在。

7. 检查LVGL的API使用:请确保您正确地使用了LVGL的API来加载和显示PNG图片。以下是一些可能有用的API:

   - `lv_img_decoder_create()`:创建一个图像解码器。
   - `lv_img_decoder_set_info_cb()`:设置图像信息回调函数。
   - `lv_img_decoder_open()`:打开图像文件。
   - `lv_img_decoder_read_line()`:读取图像的一行像素数据。
   - `lv_img_decoder_close()`:关闭图像文件。

8. 检查您的硬件:确保您的硬件(如显示屏和存储器)正常工作,并且与LVGL兼容。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分