stm32f4开发板自带的gif解码没有背景 {MOD}选择

2019-07-20 19:29发布

本人菜鸟一枚 请大神帮忙看一下 怎么样修改 能把gif(GIF本身的透明的)图片显示为融入背景 {MOD}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
zhlmtt
2019-07-20 21:42
本帖最后由 zhlmtt 于 2016-10-12 13:49 编辑

源码如下
u8 gif_decode(const u8 *filename,u16 x,u16 y,u16 width,u16 height)
{
        u8 res=0;
        u16 dtime=0;
        gif89a *mygif89a;
        FIL *gfile;
#if GIF_USE_MALLOC==1
        gfile=(FIL*)pic_memalloc(sizeof(FIL));
        if(gfile==NULL)res=PIC_MEM_ERR;
        mygif89a=(gif89a*)pic_memalloc(sizeof(gif89a));
        if(mygif89a==NULL)res=PIC_MEM_ERR;
        mygif89a->lzw=(LZW_INFO*)pic_memalloc(sizeof(LZW_INFO));
        if(mygif89a->lzw==NULL)res=PIC_MEM_ERR;
#else
        gfile=&f_gfile;
        mygif89a=&tgif89a;
        mygif89a->lzw=&tlzw;
#endif

        if(res==0)//OK
        {
                res=f_open(gfile,(TCHAR *)filename,FA_READ);
                if(res==0)
                {
                        if(gif_check_head(gfile))res=PIC_FORMAT_ERR;
                        if(gif_getinfo(gfile,mygif89a))res=PIC_FORMAT_ERR;
                        if(mygif89a->gifLSD.width>width||mygif89a->gifLSD.height>height)res=PIC_SIZE_ERR;
                        else
                        {
                                x=(width-mygif89a->gifLSD.width)/2+x;
                                y=(height-mygif89a->gifLSD.height)/2+y;
                        }
                        gifdecoding=1;
                        while(gifdecoding&&res==0)
                        {         
                                res=gif_drawimage(gfile,mygif89a,x,y);
                                if(mygif89a->gifISD.flag&0x80)gif_recovergctbl(mygif89a);
                                if(mygif89a->delay)dtime=mygif89a->delay;
                                else dtime=10;
                                while(dtime--&&gifdecoding)delay_ms(10);
                                if(res==2)
                                {
                                        res=0;
                                        break;
                                }
                        }
                }
                f_close(gfile);
        }   
#if GIF_USE_MALLOC==1
        pic_memfree(gfile);
        pic_memfree(mygif89a->lzw);
        pic_memfree(mygif89a);
#endif
        return res;
}

一周热门 更多>