liujt@tuya.com 2025年 Nov 18日 16:32请参考如下gif从文件加载方式("/fs/3.gif":你当前的实际文件及路径为主):
Code: Select all
/* gif文件加载 */ OPERATE_RET gif_img_load(char *filename, lv_img_dsc_t *img_dst) { OPERATE_RET ret = OPRT_COM_ERROR; lv_fs_file_t file; lv_fs_res_t res; res = lv_fs_open(&file, filename, LV_FS_MODE_RD); if (res != LV_FS_RES_OK) { LV_LOG_ERROR("Failed to open file: %s\n", filename); return ret; } // 读取文件大小 lv_fs_seek(&file, 0, LV_FS_SEEK_END); // 移动到文件末尾 uint32_t file_size; lv_fs_tell(&file, &file_size); // 获取文件大小 lv_fs_seek(&file, 0, LV_FS_SEEK_SET); // 移动回文件开头 // 分配内存以存储文件内容 uint8_t *buffer = tkl_system_psram_malloc(file_size); if (buffer == NULL) { LV_LOG_ERROR("Memory allocation failed\n"); lv_fs_close(&file); return ret; } uint32_t bytes_read; res = lv_fs_read(&file, buffer, file_size, &bytes_read); if (res != LV_FS_RES_OK || bytes_read != file_size) { LV_LOG_ERROR("Failed to read file: %s\n", filename); tkl_system_psram_free(buffer); // 释放内存 } else { LV_LOG_WARN("------------------------gif file '%s' load successful !\r\n", filename); img_dst->data = buffer; img_dst->data_size = file_size; ret = OPRT_OK; } lv_fs_close(&file); return ret; } void gif_load_test(void) { static lv_img_dsc_t ui_img_gif = {0}; if (gif_img_load(("/fs/3.gif"), &ui_img_gif) == 0) { //"/fs/3.gif":你当前的实际文件及路径 lv_obj_t * gif_obj = lv_gif_create(switch_screen); //switch_screen:你当前的屏幕对象 lv_obj_align_to(gif_obj, switch_screen, LV_ALIGN_TOP_LEFT, 10, 30); //放置屏幕左上角 lv_gif_set_src(gif_obj, (const void *)&ui_img_gif); lv_gif_restart(gif_obj); }
我的GIF图还没放在flash里,就在内存里