我想要使用LVGL图形转化器生成的.bin文件,然后存入外部flash显示,但我把.bin文件转成十六进制后和图形.c数组文件内容不一致,写进去显示也不对,我要如何使用bin文件并成功显示图片呢?因为后边要做服务器无线升级图片资源,也就是通过服务器下发bin文件的数据,本地接收并存入外部flash,最后通过LVGL显示
5条回答 默认 最新
阿里嘎多学长 2025-09-29 11:59关注阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
解决方案
LVGL通过外部FLASH存储.bin文件显示图片的一般流程如下:
- 确保.bin文件正确生成
确保使用LVGL图形转化器生成的.bin文件正确,不受系统或编译器的影响。
- 十六进制转换
检查十六进制转换工具是否正确,或者尝试使用不同的十六进制转换工具来转换.bin文件。
- .c数组文件内容
检查.c数组文件内容是否正确,不受系统或编译器的影响。
- 存储和读取
检查存储和读取.bin文件的代码是否正确,是否正确读取了.bin文件中图片的数据。
- 显示图像
检查显示图像的代码是否正确,是否正确使用了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文件内容和图像的大小进行调整。
解决评论 打赏 举报无用 1