游戏娱乐 新鲜速递 单机游戏 网络游戏 游戏秘技 手机游戏 游戏攻略 木马防范 流氓清除 设计专区 压缩解压 下载工具 P2P工具专区 输入法专区

您当前的位置:JZ5U绿色下载站 -> 图形图像 -> 图像处理

站内搜索

GIF反转工具 v1.0 绿色版

  • 软件大小:1.0 MB
  • 软件类型:手机软件 - 图形图像 - 图像处理
  • 软件语言:简体中文
  • 授权方式:免费软件
  • 软件星级:
  • 更新时间:2013-12-19 04:32:55
  • 运行环境:WinXP/Win2000/Win2003/Win7/Vista/Win8/WinALL

软件简介

GIF反转工具的设计思路很简单,就是先把gif分解成很多帧,然后对帧进行合并,合并帧之前把帧的位置反转一下就可以了。因为我自己对图像处理的知识不懂,只想到了思路,所以这些功能都要找些资料,然后修改,测试。

然后是两张gif的对比
//原本图是正着走的
//处理后是倒着走的
gif是动态的嘛。然后我昨天和一个朋友聊天的时候发了一串相同的gif图,然后看着千篇一律的东西。我想能不能写个程序实现gif的初始状态不同呢。什么意思呢。我们知道,gif是由帧构成的,我想实现的功能是比如一个gif共有十帧,那么我写出来的程序能够生成10个gif文件,分别对应不同的初始状态来进行循环。后来一想,gif帧太多的话,比较慢,而且也不实用,于是决定简化一下,只做一个反转工具,比如一个gif是从左到右播放的,通过这个成功可以生成一个相同的gif图,不过是倒着播放的。

分割帧的代码如下

//解码gif图片
publicList<string>GetFrames(stringpPath,stringpSavedPath)
{
Imagegif=Image.FromFile(pPath);
FrameDimensionfd=newFrameDimension(gif.FrameDimensionsList[0]);
//获取帧数(gif图片可能包含多帧,其它格式图片一般仅一帧)
intcount=gif.GetFrameCount(fd);
List<string>gifList=newList<string>();//以Jpeg格式保存各帧

for(inti=0;i<count;i++)
{
gif.SelectActiveFrame(fd,i);
gif.Save(pSavedPath+"\\frame_"+i+".png",ImageFormat.Png);
gifList.Add(pSavedPath+"\\frame_"+i+".png");
}
returngifList;
}

可以看到,返回了一个包含所有生成的帧地址的list列表。然后就是使用gifList作为参数来合并了。

//获取系统临时目录存放解码后的png图片\r\n
stringtemppath=System.Environment.GetEnvironmentVariable("TEMP");

List<string>gifList=GetFrames(tBoxFile.Text,temppath);
gifList.Reverse();
StringoutputFilePath="new.gif";
AnimatedGifEncoderae=newAnimatedGifEncoder();
ae.Start(outputFilePath);
ae.SetDelay(100);//延迟间隔\r\n
ae.SetRepeat(0);//-1:不循环,0:总是循环播放\r\n
for(inti=0,count=gifList.Count;i<count;i++)
{
ae.AddFrame(Image.FromFile(gifList[i]));
}
ae.Finish();
MessageBox.Show("成功!新文件已保存在同目录");

这里面使用了AnimatedGifEncoder这个类,这是Gif.Components.dll动态连接库里的类(此库开源,文末给出地址),是我在codeProject上找到的。首先我把gifList反转,然后合并保存到同目录。中间生成的帧为了方便我保存到了temp目录。
本来这个库里是分割gif的功能的。但是我实际测试后发现效果非常差,图片黑条泛滥,根本没法看。所以还是使用上面那段代码,相关代码我依然保存在工程里,有兴趣可以自己测试。
收起信息返回顶部

游戏预约提醒

游戏正式上线前,我们将通过免费预约短信提醒您

预约成功,请等待通知!

知道了

当前人数众多,预约失败!

知道了

您已预约,请等待通知!

知道了