wjppppppp111111 2025-09-29 11:59 采纳率: 14.3%
浏览 49

LVGL通过外部flasj存储bin文件显示图片

我想要使用LVGL图形转化器生成的.bin文件,然后存入外部flash显示,但我把.bin文件转成十六进制后和图形.c数组文件内容不一致,写进去显示也不对,我要如何使用bin文件并成功显示图片呢?因为后边要做服务器无线升级图片资源,也就是通过服务器下发bin文件的数据,本地接收并存入外部flash,最后通过LVGL显示

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-09-29 11:59
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    LVGL通过外部FLASH存储.bin文件显示图片的一般流程如下:

    1. 确保.bin文件正确生成

    确保使用LVGL图形转化器生成的.bin文件正确,不受系统或编译器的影响。

    1. 十六进制转换

    检查十六进制转换工具是否正确,或者尝试使用不同的十六进制转换工具来转换.bin文件。

    1. .c数组文件内容

    检查.c数组文件内容是否正确,不受系统或编译器的影响。

    1. 存储和读取

    检查存储和读取.bin文件的代码是否正确,是否正确读取了.bin文件中图片的数据。

    1. 显示图像

    检查显示图像的代码是否正确,是否正确使用了LVGL的API来显示图像。

    代码示例

    以下是使用LVGL在单片机上显示通过外部FLASH存储的.bin文件的代码示例:

    #include <lvgl.h>
    #include <stdio.h>
    #include <stdint.h>
    
    #define BIN_FILE_SIZE 1024 // BIN文件大小,根据实际情况调整
    #define IMG_WIDTH 240
    #define IMG_HEIGHT 240
    
    static uint8_t bin_file[BIN_FILE_SIZE];
    
    void demo(void);
    void draw_image(void *obj, lv_obj_t *obj1);
    
    int main(void) {
        // 代码初始化...
        lv_init();
        // 代码读取.bin文件的内容...
        for (int i = 0; i < BIN_FILE_SIZE; i++) {
            bin_file[i] = 0xFF; // 初始化bin_file为全 FF,根据实际情况调整
        }
        lv_disp_t *disp = lv_disp_get_disp_buf(0);
        uint16_t buf[disp->buf.hor_res * LV_HOR_RES_MAX + 1];
        lv_disp_flush_ready(disp, buf);
        // 创建一个窗口对象
        lv_obj_t *win = lv_obj_create(NULL, LV_OBJ_CLASS);
        lv_obj_set_style_win_type(win, LV_WIN_TYPE_MAIN, LV_OBJ_STYLE_ID);
        lv_obj_set_size(win, IMG_WIDTH, IMG_HEIGHT);
        lv_obj_set_pos(win, 0, 0);
        lv_obj_set_style_radial_size(win, 50, LV_OBJ_STYLE_ID);
        lv_obj_set_layout(win, LV_LAYOUT_GRID);
        
        // 调用 draw_image 函数
        draw_image(bin_file, win);
        // 展示窗口
        lv_obj_align(win, LV_ALIGN_CENTER, 0, 0);
        while (1) {
            // 循环等待
        }
        return 0;
    }
    
    void draw_image(void *obj, lv_obj_t *obj1) {
        static lv_obj_t *img;
        static lv_image_t img_data;
        static lv_color_t *buf;
        static lv_disp_t *disp;
        // 读取.bin文件的内容...
        // 将.bin文件的内容转换为LVGL的图像对象...
        lv_obj_refresh_screen(obj1);
    }
    
    void demo(void) {
        // Demo函数...
    }
    
    

    该示例代码读取.bin文件内容并使用LVGL的API来显示图像。代码示例中涉及.bin文件的读取和图像的显示,但具体实现可能需要根据实际的.bin文件内容和图像的大小进行调整。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月29日