KarryingLiu 发表于 2023-12-22 14:52:58

LVGL如何将图片bin文件直接烧录到SPIFlash,并直接读出使用

请问注册一个lv_img_dsc_t的图片变量以后应该如何填充其内容?我有好几个图片文件,有没有办法直接做成数组的形式,难搞:dizzy:

阿里兄 发表于 2023-12-22 23:47:52

http://dz.lfly.xyz/forum.php?mod=viewthread&tid=26&extra=page%3D2

参考这里,BIN图片的使用方法。

KarryingLiu 发表于 2023-12-24 22:23:54

阿里兄 发表于 2023-12-22 23:47
http://dz.lfly.xyz/forum.php?mod=viewthread&tid=26&extra=page%3D2

参考这里,BIN图片的使用方法。


谢谢阿里哥的回复,祝阿里哥生活顺意身体健康。
这个链接还是用工具转换成数组了啊,怎么实现从Flash里读出来直接转换成LVGL图片格式并使用呢?

阿里兄 发表于 2023-12-25 08:47:10

KarryingLiu 发表于 2023-12-24 22:23
谢谢阿里哥的回复,祝阿里哥生活顺意身体健康。
这个链接还是用工具转换成数组了啊,怎么实现从Flash里读 ...

电脑模拟器只能转数组测试,板子上就要从FLASH读到SDRAM,读到内存后,也就是数组差不多性质了,使用方法一样。

KarryingLiu 发表于 2023-12-25 10:05:44

本帖最后由 KarryingLiu 于 2023-12-25 10:24 编辑

阿里兄 发表于 2023-12-25 08:47
电脑模拟器只能转数组测试,板子上就要从FLASH读到SDRAM,读到内存后,也就是数组差不多性质了,使用方法 ...
还是不明白:
1、SPI里的bin文件读到SDRAM不还是bin文件吗?内存读取的话也是直接读取bin文吧?
2、转化成数组的话是不是需要找一个bin2c.c文件呢?转出来的数组又存到哪里呢?

我这里有一串代码,我用它来读取工具“True color with alpha Binary RGB888” 输出的bin格式文件,但是读取不出来
void loadBitmap(lv_img_dsc_t *image, uint32_t start_addr, uint32_t file_size)
{
    uint8_t *pbuf;      //读取数据缓冲区
    uint8_t *pbmp;
    uint32_t header;
    int secTime = file_size/4096;
    int secOff = file_size%4096;
    int i;
    dbg_printf(" secTime = %d, secOff = %d\r\n", secTime, secOff);

    pbuf = lv_mem_alloc(file_size);

    for (i=0; i<secTime; i++) {
      SPI_Flash_Read(&pbuf, start_addr+i*4096, 4096);
    }
    if (secOff>0) {
      SPI_Flash_Read(&pbuf, start_addr+secTime*4096, secOff);
    }
    /* 获取图片数据流 */
    pbmp = (uint8_t *)pbuf + 4;
    /* 获取头 */
    header = (uint32_t)pbuf << 24;
    header |= (uint32_t)pbuf << 16;
    header |= (uint32_t)pbuf << 8;
    header |= (uint32_t)pbuf;

    image->header.cf = pbuf;
    image->header.always_zero = 0;
    image->header.w = (uint16_t)(header >> 10);
    image->header.h = (uint16_t)(header >> 21);
    image->data_size = file_size - 4;
    image->data = pbmp;
}出自薛定谔是我的CAT:LVGL加载外部flash上图片

页: [1]
查看完整版本: LVGL如何将图片bin文件直接烧录到SPIFlash,并直接读出使用