参照 https://tieba.baidu.com/p/3569073088?tpl=5&red_tag=1777318765

使用mingw工具链

#include <stdbool.h>
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h> #include "include/SDL_anigif.h"
#define TITLE "SDL2 test gif"
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600 int main(int argc, char *argv[])
{
SDL_Init(SDL_INIT_VIDEO); SDL_Window *window = SDL_CreateWindow(TITLE, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN);
SDL_Renderer *render = SDL_CreateRenderer(window, -, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); //获取gif图最大数量
int gifMax = AG_LoadGIF("gif009.gif", NULL, );
AG_Frame *frames = (AG_Frame *)malloc(sizeof(AG_Frame) * gifMax);
AG_LoadGIF("gif009.gif", frames, gifMax); SDL_Rect rect = {, , , }; rect.w = frames[].surface->w;
rect.h = frames[].surface->h; SDL_Texture **textures = (SDL_Texture **)malloc(sizeof(SDL_CreateTextureFromSurface(render, frames[].surface)) * gifMax); int i;
for (i = ; i < gifMax; i++)
{
textures[i] = SDL_CreateTextureFromSurface(render, frames[i].surface);
} bool quit = false;
SDL_Event event;
i = ;
while (!quit)
{
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
quit = true;
break;
}
}
// SDL_SetRenderDrawColor(render, 255, 200, 100, 100);
SDL_RenderClear(render);
SDL_RenderCopy(render, textures[i], NULL, &rect);
i = (i + ) % gifMax;
SDL_RenderPresent(render);
SDL_Delay(frames->delay);
}
free(frames);
free(textures);
SDL_DestroyRenderer(render);
SDL_DestroyWindow(window);
SDL_Quit(); return ;
}

编译指令 gcc  ./include/SDL_anigif.c  main.c  -o sdl_gif.exe -lmingw32 -mwindows -lSDL2main -lSDL2

希望对大家有帮助

#include <stdbool.h>
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include "include/SDL_anigif.h"
#define TITLE "SDL2 test gif"
#define WINDOW_WIDTH 
#define WINDOW_HEIGHT 
int main(int argc, char *argv[])
{
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window *window = SDL_CreateWindow(TITLE, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN);
    SDL_Renderer *render = SDL_CreateRenderer(window, -, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    //获取gif图最大数量
    int gifMax = AG_LoadGIF("gif009.gif", NULL, );
    AG_Frame *frames = (AG_Frame *)malloc(sizeof(AG_Frame) * gifMax);
    AG_LoadGIF("gif009.gif", frames, gifMax);
    SDL_Rect rect = {, , , };
    rect.w = frames[].surface->w;
    rect.h = frames[].surface->h;
    SDL_Texture **textures = (SDL_Texture **)malloc(sizeof(SDL_CreateTextureFromSurface(render, frames[].surface)) * gifMax);
    int i;
    for (i = ; i < gifMax; i++)
    {
        textures[i] = SDL_CreateTextureFromSurface(render, frames[i].surface);
    }
    bool quit = false;
    SDL_Event event;
    i = ;
    while (!quit)
    {
        while (SDL_PollEvent(&event))
        {
            switch (event.type)
            {
            case SDL_QUIT:
                quit = true;
                break;
            }
        }
        // SDL_SetRenderDrawColor(render, 255, 200, 100, 100);
        SDL_RenderClear(render);
        SDL_RenderCopy(render, textures[i], NULL, &rect);
        i = (i + ) % gifMax;
        SDL_RenderPresent(render);
        SDL_Delay(frames->delay);
    }
    free(frames);
    free(textures);
    SDL_DestroyRenderer(render);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return ;
}

SDL2 gif动态图加载的更多相关文章

  1. ie6,7下js动态加载图片不显示错误

    ie6,7下js动态加载图片不显示错误 先描述一下出现这种匪夷所思bug的背景: 我在页面加载的时候加载一堆小缩略图,<a href="javascript:void(0);" ...

  2. Unity使用脚本进行批量动态加载贴图

    先描述一下我正在做的这个项目,是跑酷类音游. 那么跑酷类音游在绘制跑道上的时候,就要考虑不同的砖块显示问题.假设我有了一个节奏列表,那么我们怎么将不同的贴图贴到不同的砖块上去呢? 我花了好几个小时才搞 ...

  3. js动态加载css和js

    之前写了一个工具类点此链接里面含有这段代码,感觉用处挺多,特意提出来 var loadUtil = { /* * 方法说明:[动态加载js文件css文件] * 使用方法:loadUtil.loadjs ...

  4. geotrellis使用(二十三)动态加载时间序列数据

    目录 前言 实现方法 总结 一.前言        今天要介绍的绝对是华丽的干货.比如我们从互联网上下载到了一系列(每天或者月平均等)的MODIS数据,我们怎么能够对比同一区域不同时间的数据情况,采用 ...

  5. Ext JS 如何动态加载JavaScript创建窗体

    JavaScript不需要编译即可运行,这让JavaScript构建的应用程序可以变得很灵活.我们可以根据需要动态从服务器加载JavaScript脚本来创建和控制UI来与用户交互.下面结合Ext JS ...

  6. Ext动态加载Toolbar

    在使用Ext的GridPanel时候,有时候需要面板不用重新加载而去更新Store或者Toolbar,Store的方法有很多,例如官方api给我们提供的Store.load(),Store.reLoa ...

  7. Android动态加载框架汇总

    几种动态加载的比较 1.Tinker 用途:热修复 GitHub地址:https://github.com/Tencent/tinker/ 使用:http://www.jianshu.com/p/f6 ...

  8. 为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件

    为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件.样式文件命名格式如:forms[_屏幕宽度].css,样式文件中只需重新定义文本框和下拉框的宽度即可. 在包含的头文件 ...

  9. html中的图像动态加载问题

    首先要说明下文档加载完成是什么概念 一个页面http请求访问时,浏览器会将它的html文件内容请求到本地解析,从窗口打开时开始解析这个document,页面初始的html结构和里面的文字等内容加载完成 ...

随机推荐

  1. SpringBoot代码生成器,从此不用手撸代码

    前言 通常在开始开发项目的时候,首先会建立好数据库相关表,然后根据表结构生成 Controller.Service.DAO.Model以及一些前端页面. 如果开发前没有强制的约束,而每个程序员都有自己 ...

  2. SPOJ-PGCD Primes in GCD Table

    题目链接:https://vjudge.net/problem/SPOJ-PGCD 题目大意: 给定 \(N\) 和 \(M\),求满足 \((1 \le x \le N), (1 \le y \le ...

  3. 程序员都在用的 IDEA 插件(不断更新)

    IDEA一些不错的插件分享 目录 IDEA一些不错的插件分享 插件集合 CamelCase Translation LiveEdit MarkDown Navigator Jrebel CheckSt ...

  4. Java 基础系列知识梳理

  5. nodejs 开发服务端 部署到 iis 服务器环境 -- iisnode 安装问题解决记录

    开发环境 nodejs: v10.15.3 windows: 10 iis: 10 需求: 用Nodejs开发了服务端,要部署到IIS 需要在IIS服务器上安装iisnode,结果遇到问题:安装不上 ...

  6. python3.7 64bit安装pygame1.9.3

    https://blog.csdn.net/xiaolixi199311/article/details/79209506/

  7. & vue项目中的rem适配

    有个朋友问我在vue项目怎么做rem适配,我工作中都是用的dva,但是我感觉道理都是一样的,换汤不换药.配完就顺手写下来吧! 需要安装两个插件库 lib-flexible和px2rem-loader ...

  8. Vue中控制更新的方式

    一.  强制更新的实例方法   vm.$forceUpdate() 迫使 Vue 实例重新渲染.注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件. 在没有留意到数组或对象的变更检测注意事 ...

  9. 概念辨析-Hardware Description还是Hardware Developing?

    https://mp.weixin.qq.com/s/j4Ndo1R4Go9IaGbhE_nsTg   Verilog, standardized as IEEE 1364, is a hardwar ...

  10. Rocket - config - implicit Parameters

    https://mp.weixin.qq.com/s/OH_Z1gdSUpfgM-tjx0OlrA   追溯配置信息的源头.   0. HasRocketCoreParameters   ​​ Has ...