lvglv8.1以上的版本自带动态图库
github网址:LVGL · GitHub
主要包含四个文件:gifdec.c 、gifdec.h、lv_gif.c、lvgif.h。
目录:lvgl-release-v8.1\lvgl-release-v8.1\src\extra\libs\gif
由于我在做的项目移植的是lvgl7.11release版本 所以我暂时没有使用这个。
其它低版本的lvgl可以用下面的库
GitHub - lvgl/lv_lib_gif at release/v7y
也是包含了四个文件:gifdec.c 、gifdec.h、lv_gif.c、lvgif.h。把它复制到移植好的项目中,修改一下没有初始化的编译错误,就可以在lvgl显示动态图了。
具体的操作步骤如下:
开始使用
- 下载或克隆此存储库
- 从 GitHub 下载
- 克隆:
git clone https://github.com/lvgl/lv_lib_gif.git
- 包括库:
#include "lv_lib_gif/lv_gif.h"
使用文件中的Gif图像
lv_obj_t * img = lv_gif_create_from_file(parent, "S/path/to/example.gif");
使用 Flash 中的 GIF 图像
如果将 gif 文件作为 C 数组存储在 flash 中:
extern const uint8_t example_gif_map[]; /*Use the example gif*/
lv_obj_t * img = lv_gif_create_from_data(parent, example_gif_map);
将 GIF 文件转换为 C 数组
使用lvgl 在线转换器Online image converter - BMP, JPG or PNG to C array or binary | LVGL,选择RAW 颜色格式 和"C array" 输出格式。
因为用lvgl的转换成C数组格式输出的动态图失真比较严重,所以我有采取了另外一种办法。
把GIF图每一帧都另存为JPG 然后让它一张一张显示 具体实现如下:
#define NUM_IMAGES 5
LV_IMG_DECLARE(img1)
LV_IMG_DECLARE(img2)
LV_IMG_DECLARE(img3)
LV_IMG_DECLARE(img4)
LV_IMG_DECLARE(img5)
lv_img_dsc_t *const my_images[NUM_IMAGES] = {
&img1,
&img2,
&img3,
&img4,
&img5
};
static lv_obj_t *img_loop; /*To be created in the main() function*/
static void img_looper(lv_task_t *param) {
(void)param;
static int img_index = 0;
lv_img_set_src(img_loop, my_images[img_index]); /* Set the next image */
img_index++;
if(img_index == 5)
img_index = 0;
}
int main(void)
{
. . .
img_loop = lv_img_create(lv_scr_act(), NULL);
lv_task_create( img_looper, 200, LV_TASK_PRIO_LOWEST, NULL );
}