/** * bg_gif_demo.h — 背景图 + 透明 GIF 叠加显示(方案 C) * * 数据流: * - 背景图(JPG)→ esp_jpeg 解码 RGB565 → lv_img(底层) * - Hiyori GIF(带 Alpha 透明)→ PSRAM → lv_gif(上层叠加) * * 优势: * - 背景图加载一次,常驻 PSRAM,不刷新 * - GIF 切换时仅刷新 GIF 区域,背景透出 * - 与 LVGL 字幕/UI 完美共存 */ #pragma once #include "esp_err.h" #include #ifdef __cplusplus extern "C" { #endif /** * 启动背景 + GIF 叠加显示 * * @param bg_jpg_path 背景图 JPG 文件路径,例如 "/spiflash/Background_360x360.jpg" * @param gif_path 透明 GIF 文件路径,例如 "/spiflash/hiyori_m05.gif" * @return ESP_OK 成功 */ esp_err_t bg_gif_demo_start(const char *bg_jpg_path, const char *gif_path); void bg_gif_demo_stop(void); bool bg_gif_demo_is_running(void); /** * 运行时切换数字人 GIF(背景图保持不变) * * 释放旧 GIF 的 PSRAM → 加载新 GIF → lv_gif_set_src → 重置定时器周期 20ms * 内部带"相同路径去重",重复调用无副作用 * * @param new_gif_path 新 GIF 路径,例如 "/spiflash/hiyori_m03.gif" * @return ESP_OK 成功;ESP_ERR_INVALID_STATE 未启动;ESP_ERR_NO_MEM PSRAM 不足;ESP_FAIL 文件错误 */ esp_err_t bg_gif_demo_switch_gif(const char *new_gif_path); #ifdef __cplusplus } #endif