SDL2解析gif动态图片
sdl吧
全部回复
仅看楼主
level 13
小牛_牛sky 楼主
2016年05月13日 02点05分 1
level 13
小牛_牛sky 楼主
c4亲测可用,win亲测可用
2016年05月13日 02点05分 2
level 13
小牛_牛sky 楼主
接下来不要急,我先整理下资源
2016年05月13日 02点05分 3
level 13
小牛_牛sky 楼主
源码地址:[无效] http://pan.baidu.com/s/1c1PGf7q
----------------------------------------------------------------------
1.这个并不是我开发的,是一个外国人,好像从2006年起就没有更新过了,
今天心血来潮,就发了封邮件给SDL官方,官方说并不提供 animated gif,
然后给了我个网址,我先下载下来,发现是以SDL1.x写的,因为我现在主要使用SDL2
所以就稍微改变了下,发现果然能运行,而且还挺好用的,
SDL_AniGIF是我更改后的文件,
SDL_AniGIF-1.0.0是原先的文件,具体关于gif解码的,我就不多说了(我也不会。。)
大家多测试测试。
另:c4droid 4.97不能运行,
具体看
https://tieba.baidu.com/p/3569073088?tpl=5
C4droid 4.98(官方英文版,官方签名)
更新时间:2014-02-01
更新内容:
[官方] 修复错误(C++11/C++14 标准下 G++ __cxa_throw_bad_array_new_length 的未定义引用)
undefined reference to __cxa_thorw_bad_array_new_length
2016年05月13日 03点05分 4
eclipse能通过吗
2016年07月29日 12点07分
@2tianshi2967 没试过用eclipse编写c++不过一般POSIX的都支持
2016年07月29日 12点07分
level 13
小牛_牛sky 楼主
//源码
#include "SDL2/SDL.h"
#include<cstdio>
#include<vector>
#include "SDL_anigif.h"
int main(int argc,char**argv)
{
SDL_Event event;
bool g_bRunning = true;
int currentFrame = 0;
SDL_Rect destRect={0,0,0,0};
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window*gWin = SDL_CreateWindow("gif test",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,640,480,SDL_WINDOW_SHOWN);
SDL_Renderer*gRen = SDL_CreateRenderer(gWin,-1,SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC);
//获取最大数量
int number = AG_LoadGIF("1.gif",NULL,0);
AG_Frame*frames = new AG_Frame[number];
AG_LoadGIF("1.gif",frames,number);
printf("the number of gif is:%d",number);
//获取大小
destRect.w = frames[0].surface->w;
destRect.h = frames[0].surface->h;
//由frames创建texture
std::vector<SDL_Texture*> textures;
for(int i=0;i<number;i++)
{
SDL_Texture*texture = SDL_CreateTextureFromSurface(gRen,frames[i].surface);
textures.push_back(texture);
}
while(g_bRunning)
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
g_bRunning = false;
break;
}
}
SDL_SetRenderDrawColor(gRen,255,200,100,255);
SDL_RenderClear(gRen);
SDL_RenderCopy(gRen,textures.at(currentFrame++%number),NULL,&destRect);
SDL_RenderPresent(gRen);
SDL_Delay(frames->delay);
}
AG_FreeSurfaces(frames,number);
delete[] frames;
SDL_DestroyRenderer(gRen);
SDL_DestroyWindow(gWin);
return 0;
}
2016年05月13日 03点05分 5
思必达学院让你花一周时间,你就可以直接入职,完美上手,就是让你这么快, 思必达学院!
2016年06月23日 06点06分
level 13
小牛_牛sky 楼主
2016年05月13日 03点05分 6
电脑测试图
2016年05月13日 03点05分
level 13
小牛_牛sky 楼主
2016年05月13日 03点05分 7
level 13
小牛_牛sky 楼主
2016年05月13日 03点05分 8
level 12
赞一个
2016年05月13日 03点05分 9
level 13
小牛_牛sky 楼主
刚才测试了一下,使用的时候,注意AG_Frame的x,y是偏移位置,而且每个surface的大小也是不同的,这个需要注意下
2016年05月13日 06点05分 11
level 9
好厉害的样子[吐舌]
2016年05月13日 12点05分 12
嘿嘿
2016年05月13日 12点05分
如果自己了解gif的文件格式的话, 把各帧提取出来,再用updateTexture来更新纹理应该也可以。
2016年05月13日 12点05分
@简单aaaaaaa 这个就是这样的
2016年05月13日 12点05分
level 1
gif说来也是种常用图像格式,SDL_image是处理图像项目,何不去修改SDL_image让支持gif呢。这样一来其它人要显示gif就像PNG一样简单了。
2016年05月13日 15点05分 13
gif相对来说并不好用,用gif虽然来自同一个文件,但纹理并不同。至于修改,感觉没必要
2016年05月14日 04点05分
@小牛_牛sky 刚看了一下,最新版的SDL_image 2.0.1已支持gif了。
2016年05月14日 06点05分
@仅剩的梦 有吗??
2016年07月28日 07点07分
@仅剩的梦 怎么用啊,我怎么还是不支持
2017年05月16日 16点05分
level 6
[真棒]厉害,不过做游戏的时候应该是sprite sheet图用得多吧,收藏先。顺便问下,ubuntu下makefile怎么连接SDL2静态库啊,我出现一堆未定义的引用,SDL2我是用新立得装的,不知道静态库在哪个文件夹[乖]谢谢
2016年05月13日 16点05分 14
这就要看sdl文件夹放哪个地方了。上次给你发的文档里有,你好好看看
2016年05月14日 05点05分
@小牛_牛sky 嗯,能生成几个.o文件,到连接成可执行文件的时候就会发生未定义的引用,这是什么原因呢,还有,我找到SDL2库文件在哪了,但用static连接也是这个问题,难道是我makefile语法不对?
2016年05月14日 06点05分
@小牛_牛sky 可以了,谢谢,不过运行可执行文件的时候,出现 段错误(核心已转存)
2016年05月14日 06点05分
@小牛_牛sky 好吧,我的问题已经都解决了,可以在ubuntu下运行了,非常感谢谢
2016年05月14日 06点05分
level 9
sdl的image扩展问题完全没必要,和你加载什么图片用相应的li
bp
ng libjpeg libgif开源库,直接输到到内存缓冲区,texture直接从缓冲区update就可以了
2016年05月14日 17点05分 16
给个例子。认例子不认人[太开心] 而且我还特地问了SDL官方他们说暂时没有读取动态gif,然后给了我这个
2016年05月15日 00点05分
@小牛_牛sky 人家肯定认为没必要,懒得加入,做这个扩展大概半天就够了,再半天移植不同平台
2016年05月21日 16点05分
@lx716930jp 还行吧
2016年05月22日 13点05分
level 9
你可以直接拿libgif搞,SDL的颜色格式同一就可以,没有杂交不亲和
2016年05月14日 17点05分 17
1 2 尾页