LVGL7.0高级界面开发-3

该博客介绍了如何在LVGL图形库中优化PNG和GIF的显示性能。通过修改源码,实现了提前解码PNG图片并在内存中存储,避免了运行时的解码延迟。此外,还分享了如何添加LV_GIF支持,并提供了一个创建动态背景的示例。最后,博主分享了一个包含LVGL改进的VS2019工程的下载链接。

vs2019开发,还是有点不方便,图片还要编码,然后显示,着实不方便,下一步搞搞freetype也可以显示。

1、添加LV_PNG

官网上的lv_png拉取,但需要做些修改,静态画面显示没问题,但是让图标动起来,那就“出问题”,显示太慢了。分析源码,可以看出是直接读取文件在解码。

看源码lodepng.c line:418左右。

#ifdef LODEPNG_COMPILE_DISK//从硬盘读取文件并解码
/* returns negative value on error. This should be pure C compatible, so no fstat. */
static long lodepng_filesize(const char* filename)
{
#if LV_PNG_USE_LV_FILESYSTEM
    lv_fs_file_t f;
    lv_fs_res_t res = lv_fs_open(&f, filename, LV_FS_MODE_RD);
    if(res != LV_FS_RES_OK) return -1;
    uint32_t size = 0;
    lv_fs_size(&f, &size);
    lv_fs_close(&f);
    return size;
#else
    if (!strcmp(&filename[strlen(filename) - 3], "png")) 
    {
        long size;
        FILE* file;
        file = fopen(filename, "rb");
        if (!file) return -1;

        if (fseek(file, 0, SEEK_END) != 0)
        {
            fclose(file);
            return -1;
        }

        size = ftell(file);
        /* It may give LONG_MAX as directory size, this is invalid for us. */
        if (size == LONG_MAX) size = -1;

        fclose(file);
        return size;
    }
#endif
}

/* load file into buffer that already has the correct allocated size. Returns error code.*/
static unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename)
{
#if LV_PNG_USE_LV_FILESYSTEM
    lv_fs_file_t f;
    lv_fs_res_t res = lv_fs_open(&f, filename, LV_FS_MODE_RD);
    if(res != LV_FS_RES_OK) return 78;

    uint32_t br;
    res = lv_fs_read(&f, out, size, &br);
    if(res != LV_FS_RES_OK) return 78;
    if (br != size) return 78;
    lv_fs_close(&f);
    return 0;
#else
    if (!strcmp(&filename[strlen(filename) - 3], "png"))
    {
        FILE* file;
        size_t readsize;
        file = fopen(filena
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值