黄山派TF gif图播放使用例程

文章目录

一、简介

播放文件中的gif图片,播放TF卡中的gif图片

前置相关TF等博文拓展

例程参考:[AGif播放] (https://docs.sifli.com/projects/sdk/latest/sf32lb52x/example/multimedia/agif/lvgl/README.html) 、LVGL_v8_example

二、配置/代码

1.开启menuconfig配置


2.资源存放

存放位置再 assert/gif文件夹下

TF卡gif图存放在根目录 gif/xxx.gif

需要在SConscript中添加相关配置

c 复制代码
# for module compiling
import os
from building import *
import rtconfig

cwd = GetCurrentDir()
list = os.listdir(cwd)

objs_ezip = []
objs_gif = []
objs_no_ezip = []
objs_large_ezip = []

objs_ezip += Glob('*ezip/*.png')
objs_gif += Glob('*gif/*.gif')
objs_no_ezip = Glob('no_ezip/*.png')
objs_large_ezip += Glob('large_ezip/*.png')

def align_to_power_of_two_and_str(num):
    power = 1
    while power < num:
        power *= 2
    return str(power)

#color_fmt, file_fmt, section_name
if 16 == GetConfigValue('LV_COLOR_DEPTH'):
    img_flags = '-rgb565'
else:
    img_flags = '-rgb888'

img_flags = img_flags + '  -section ROM3_IMG  -lvgl_version 9 '

if GetDepend('EZIP_PAL_SUPPORT'):
    if GetDepend('EZIP_PAL_SUPPORT_1'):
        img_flags += ' -pal_support 1 '
    else:
        img_flags += ' -pal_support '

if GetDepend('LV_FB_LINE_NUM'):
    ers_v = align_to_power_of_two_and_str(GetConfigValue('LV_FB_LINE_NUM'))
else:
    ers_v = '128'

if GetDepend('BSP_USING_PC_SIMULATOR'):
    objs = Env.ImgResource(objs_no_ezip + objs_ezip + objs_large_ezip + objs_gif, img_flags+' -cfile 1 -simu')
else:
    objs = Env.ImgResource(objs_no_ezip, img_flags+' -cfile 1 -dpt 1')
    objs += Env.ImgResource(objs_ezip, img_flags+' -cfile 2 -dpt 1')
    objs += Env.ImgResource(objs_gif, img_flags+' -cfile 2 -dpt 1')
    objs += Env.ImgResource(objs_large_ezip, img_flags+' -cfile 2 -dpt 4 -ers '+ers_v)

if GetOption('no_cc'):
    objs = []
    
objs = DefineGroup('resource', objs, depend = ['PKG_USING_LITTLEVGL2RTT'])  

Return ('objs')

3.代码

以下两段代码选择一段均可显示
文件夹中gif图播放代码

c 复制代码
    LV_IMG_DECLARE(muse);
    lv_obj_t *gif;   
    lv_color_t bg_color;
		
	 /* gif控件创建 */
    gif = lv_gif_dec_create(lv_scr_act(), LV_EXT_IMG_GET(muse), &bg_color, LV_COLOR_DEPTH);
    lv_gif_dec_loop(gif, 1, 16);
    lv_gif_dec_end_cb_register(gif, agif_loop_end_func);

TF卡中gif图播放代码

c 复制代码
    lv_obj_t *gif;
    gif = lv_gif_create(lv_scr_act());
    lv_gif_set_src(gif,"A:gif/xiaochou.gif");
    LOG_I("set gif success");
    lv_obj_center(gif);

完整代码

c 复制代码
#include "rtthread.h"
#include "bf0_hal.h"
#include "drv_io.h"
#include "./LVGL/lvgl_v9.h"
#include "mem_section.h"  //L2_RET_BSS_SECT

#define TF_JPG_THREAD_STACK_SIZE (8 * 1024)

static uint32_t tf_jpg_thread_stack[TF_JPG_THREAD_STACK_SIZE / sizeof(uint32_t)] L2_RET_BSS_SECT(tf_jpg_thread_stack);


static struct rt_thread tf_jpg_thread;
/**
  * @brief  Main program
  * @param  None
  * @retval 0 if success, otherwise failure number
  */
int main(void)
{
    rt_uint32_t ms;

    lvgl_v9_init();     // Initialize LVGL


    // lv_obj_t *gif;
    // gif = lv_gif_create(lv_scr_act());
    // lv_gif_set_src(gif,"A:gif/huaixiao.gif");
    //LOG_I("set gif success");

    // lv_obj_t * img = lv_img_create(lv_scr_act());
    // lv_img_set_src(img, "A:/picture/TF_1.jpg");
    // lv_obj_center(img);
    // lv_obj_align(img, LV_ALIGN_CENTER, 0, 0);

    rt_err_t tf_jpg_thread_result = rt_thread_init(&tf_jpg_thread,    
                                                    "TF_JPG",          
                                                    TF_JPG_display,
                                                    NULL,              
                                                    &tf_jpg_thread_stack[0], 
                                                    TF_JPG_THREAD_STACK_SIZE, 
                                                    20,                
                                                    10);               
    if (tf_jpg_thread_result == RT_EOK)
    {
        rt_thread_startup(&tf_jpg_thread); // 启动
    }
    else
    {
        rt_kprintf("Failed to init TF_JPG thread\n");
    }

    while (1)
    {
        ms = lv_task_handler();
        rt_thread_mdelay(ms);
    }
    return RT_EOK;

}

#include "lvgl_v9.h"
#include <rtthread.h>
#include <rtdevice.h>
#include "littlevgl2rtt.h"
#include "lvgl.h"
#include "gui_app_fwk.h"
#include "gifdec.h"
//#include "app_mem.h"
#include "lv_ext_resource_manager.h"
#include "ulog.h"
#include "agif.h"

rt_err_t lvgl_v9_init(void)
{

    rt_err_t ret = RT_EOK;

    /* init littlevGL */
    ret = littlevgl2rtt_init("lcd");
    if (ret != RT_EOK)
    {
        return ret;
    }
    lv_ex_data_pool_init();

    return RT_EOK;
}



TF_JPG_display_t jpg_display;   // JPG显示结构体

static void agif_loop_end_func(void)
{
    LOG_I("%s", __func__);
}

void TF_JPG_display(void *parameter)
{   
    //jpg_display.img_obj = lv_img_create(lv_scr_act());

    LV_IMG_DECLARE(muse);
    lv_obj_t *gif;   
    lv_color_t bg_color;
    gif = lv_gif_dec_create(lv_scr_act(), LV_EXT_IMG_GET(muse), &bg_color, LV_COLOR_DEPTH);
    lv_gif_dec_loop(gif, 1, 16);
    lv_gif_dec_end_cb_register(gif, agif_loop_end_func);
    
    
    // lv_obj_t *gif;
    // gif = lv_gif_create(lv_scr_act());
    // lv_gif_set_src(gif,"A:gif/xiaochou.gif");
    // LOG_I("set gif success");
    // lv_obj_center(gif);

    // lv_obj_t *gif;
    // gif = lv_gif_create(lv_scr_act());
    // lv_gif_set_src(gif,"A:gif/huaixiao.gif");
    

    while (1)
    {
        // for(int i = 5; i >= 1; i--)   //有几张图片就改几
        // {
        //     /* Assuming a File system is attached to letter 'A'
        //     * E.g. set LV_USE_FS_STDIO 'A' in lv_conf.h */
        //     rt_snprintf(jpg_display.file_path, sizeof(jpg_display.file_path), 
        //                 "A:/picture/TF_%d.jpg",                     /* 图片存放在根目录 /picture 文件夹下,命名方式为TF_x.jpg */
        //                     i);

        //     lv_img_set_src(jpg_display.img_obj, jpg_display.file_path);

        //     const void * src = lv_img_get_src(jpg_display.img_obj);
        //     lv_img_decoder_get_info(src, &jpg_display.img_header);

        //     lv_coord_t width = jpg_display.img_header.w;
        //     lv_coord_t height = jpg_display.img_header.h;

        //     lv_obj_set_pos(jpg_display.img_obj, (LCD_WIDTH - width) / 2 , (LCD_HEIGHT - height) / 2); // 居中显示

        rt_thread_mdelay(2000);
        //}
    }
}
相关推荐
诺狞猫1 个月前
黄山派 TF卡使用
科技·学习·黄山派·思澈·sifli
muub6 个月前
【黄山派-SF32LB52】—硬件原理图学习笔记
单片机·嵌入式硬件·原理图·黄山派·sf32·思澈科技·立创开发板
desssq6 个月前
嘉立创黄山派下载watch ui demo 教程(sf32)
ui·嵌入式·嘉立创·黄山派