第一看下成效图:
然后是两张gif的对比
//原本图是正着走的
//处置后是倒着走的
gif是动态的嘛。然后我昨天和一个朋友聊天的时候发了一串相同的gif图,然后看着千篇一律的东西。我想能否写个程序达成gif的初始状况不同呢。的意思是呢。大家了解,gif是由帧构成的,我想达成的功能是譬如一个gif共有十帧,那样我写出来的程序可以生成10个gif文件,分别对应不一样的初始状况来进行循环。后来一想,gif帧太多的话,比较慢,而且也不实用,于是决定简化一下,只做一个反转工具,譬如一个gif是从左到右播放的,通过这个成功可以生成一个相同的gif图,不过是倒着播放的。
思路非常简单,就是先把gif分解成不少帧,然后对帧进行合并,合并帧之前把帧的地方反转一下就能了。由于我一个人对图像处置的常识不懂,只想到了思路,所以这类功能都要找些资料,然后修改,测试。
//解码gif图片publicListstringGetFrames{Imagegif=Image.FromFile;FrameDimensionfd=newFrameDimension;//获得帧数intcount=gif.GetFrameCount;ListstringgifList=newListstring;//以Jpeg格式保存各帧for{gif.SelectActiveFrame;gif.Save;gifList.Add;}returngifList;}
可以看到,返回了一个包括所有生成的帧地址的list列表。然后就是用gifList作为参数来合并了。
//获得系统临时目录存放解码后的png图片\r\nstringtemppath=System.Environment.GetEnvironmentVariable;ListstringgifList=GetFrames;gifList.Reverse;StringoutputFilePath=new.gif;AnimatedGifEncoderae=newAnimatedGifEncoder;ae.Start;ae.SetDelay;//延迟间隔\r\nae.SetRepeat;//-1:不循环,0:一直循环播放\r\nfor{ae.AddFrame);}ae.Finish;MessageBox.Show;
这里面用了AnimatedGifEncoder这个类,这是Gif.Components.dll动态连接库里的类(此库开源,文末给出地址),是我在codeProject上找到的。第一我把gifList反转,然后合并保存到同目录。中间生成的帧为了便捷我保存到了temp目录。
本来这个库里是分割gif的功能的。但我实质测试后发现成效很差,图片黑条泛滥,根本没法看。所以还是用上面那段代码,有关代码我依旧保存在工程里,感兴趣可以自己测试。
TAG标签:GIF(1)
转载请说明来源于木蚂蚁软件园(https://www.stgccy.com)
本文地址:https://www.stgccy.com/xz/763.html
郑重声明:文章来源于网络作为参考,本站仅用于分享不存储任何下载资源,如果网站中图片和文字侵犯了您的版权,请联系我们处理!邮箱3450399331@qq.com