GIF 解码器

允许在 LVGL 中使用 GIF 图像。基于 https://github.com/lecram/gifdec

lv_conf.h 中启用 LV_USE_GIF 后,可以使用 lv_gif_create(parent) 创建一个 GIF 小部件。

lv_gif_set_src(obj, src) 的工作方式与 lv_img_set_src 非常相似。作为源,它也接受图像变量(lv_img_dsc_t)或文件。

将 GIF 文件转换为 C 数组

要将 GIF 文件转换为字节值数组,请使用 LVGL 的在线转换器。选择“Raw”颜色格式和“C array”输出格式。

从文件中使用 GIF 图像

例如:

lv_gif_set_src(obj, "S:path/to/example.gif");

注意,需要注册一个文件系统驱动程序才能从文件中打开图像。可以在此处阅读更多内容,或者只需在 lv_conf.h 中启用一个文件系统驱动程序,例如 LV_USE_FS_...

内存需求

要解码和显示 GIF 动画,需要以下数量的 RAM:

  • LV_COLOR_DEPTH 8:3 x 图像宽度 x 图像高度

  • LV_COLOR_DEPTH 16:4 x 图像宽度 x 图像高度

  • LV_COLOR_DEPTH 32:5 x 图像宽度 x 图像高度

示例

从文件和变量中打开 GIF 图像

C code  

 GitHub
#include "../../lv_examples.h"
#if LV_USE_GIF && LV_BUILD_EXAMPLES

/**
 * Open a GIF image from a file and a variable
 */
void lv_example_gif_1(void)
{
    LV_IMG_DECLARE(img_bulb_gif);
    lv_obj_t * img;

    img = lv_gif_create(lv_scr_act());
    lv_gif_set_src(img, &img_bulb_gif);
    lv_obj_align(img, LV_ALIGN_LEFT_MID, 20, 0);

    img = lv_gif_create(lv_scr_act());
    /* Assuming a File system is attached to letter 'A'
     * E.g. set LV_USE_FS_STDIO 'A' in lv_conf.h */
    lv_gif_set_src(img, "A:lvgl/examples/libs/gif/bulb.gif");
    lv_obj_align(img, LV_ALIGN_RIGHT_MID, -20, 0);
}

#endif

MicroPython code  

 GitHub Simulator
#!/opt/bin/lv_micropython -i
import lvgl as lv
import display_driver
import fs_driver
from img_bulb_gif import img_bulb_gif_map

fs_drv = lv.fs_drv_t()
fs_driver.fs_register(fs_drv, 'S')
#
# Open a GIF image from a file and a variable
#
img_bulb_gif = lv.img_dsc_t(
    {
        "header": {"always_zero": 0, "w": 0, "h": 0,  "cf": lv.img.CF.RAW},
        "data_size": 0,
        "data": img_bulb_gif_map,
    }
)
img1 = lv.gif(lv.scr_act())
img1.set_src(img_bulb_gif)
img1.align(lv.ALIGN.RIGHT_MID, -150, 0)

img2 = lv.gif(lv.scr_act())
# The File system is attached to letter 'S'

img2.set_src("S:bulb.gif")
img2.align(lv.ALIGN.RIGHT_MID, -250, 0)

API

Functions

lv_obj_t *lv_gif_create(lv_obj_t *parent)
void lv_gif_set_src(lv_obj_t *obj, const void *src)
void lv_gif_restart(lv_obj_t *gif)

Variables

const lv_obj_class_t lv_gif_class
struct lv_gif_t

Public Members

lv_img_t img
gd_GIF *gif
lv_timer_t *timer
lv_img_dsc_t imgdsc
uint32_t last_call