从gif动画图像中导出桢的方法实现
近几天,一直在搞gif文件格式,在网上找到一个,正在分析。可以说gif图像在几种图像格式里面算是比较复杂的了,废话少说,先实现一个从gif动画里面导出桢来的方法:
效果如下:
原来gif动画图像:
导出来的图像:
代码:
本来想在SelectActiveFrame后像处理jpeg图像一样黑白,但是SelectActiveFrame执行后,上次的修改都变成无效的了,郁闷。SaveAdd方法也不能用于gif格式。系统只提供了gif的解码器,却没有提高编码器。晕倒。
自己从网上找了一个,正在学习
效果如下:
原来gif动画图像:
导出来的图像:
代码:
1 public void ExportFromGif(string gifFile,string outputDir)
2 {
3 Bitmap bmp = new Bitmap(gifFile);
4 if (bmp.RawFormat.Guid != ImageFormat.Gif.Guid)
5 {
6 throw new Exception("不是gif格式的文件,格式错误!");
7 }
8 //获得桢的维数
9 foreach (Guid guid in bmp.FrameDimensionsList)
10 {
11 FrameDimension frameDimension = new FrameDimension(guid);
12 //获得gif动画桢的数量
13 int frameCount = bmp.GetFrameCount(frameDimension);
14 //用于存放导出的图像
15 for (int i = 0; i < frameCount; i++)
16 {
17 //选中一桢
18 int selectResult = bmp.SelectActiveFrame(frameDimension, i);
19 if (selectResult == 0)
20 {
21 Image img = Image.FromHbitmap(bmp.GetHbitmap());
22 string savePath = outputDir + Guid.NewGuid().ToString()+".jpg";
23 img.Save(savePath);
24 img.Dispose();
25 }
26 }
27 }
28 }
29 }
2 {
3 Bitmap bmp = new Bitmap(gifFile);
4 if (bmp.RawFormat.Guid != ImageFormat.Gif.Guid)
5 {
6 throw new Exception("不是gif格式的文件,格式错误!");
7 }
8 //获得桢的维数
9 foreach (Guid guid in bmp.FrameDimensionsList)
10 {
11 FrameDimension frameDimension = new FrameDimension(guid);
12 //获得gif动画桢的数量
13 int frameCount = bmp.GetFrameCount(frameDimension);
14 //用于存放导出的图像
15 for (int i = 0; i < frameCount; i++)
16 {
17 //选中一桢
18 int selectResult = bmp.SelectActiveFrame(frameDimension, i);
19 if (selectResult == 0)
20 {
21 Image img = Image.FromHbitmap(bmp.GetHbitmap());
22 string savePath = outputDir + Guid.NewGuid().ToString()+".jpg";
23 img.Save(savePath);
24 img.Dispose();
25 }
26 }
27 }
28 }
29 }
本来想在SelectActiveFrame后像处理jpeg图像一样黑白,但是SelectActiveFrame执行后,上次的修改都变成无效的了,郁闷。SaveAdd方法也不能用于gif格式。系统只提供了gif的解码器,却没有提高编码器。晕倒。
自己从网上找了一个,正在学习
作者:jillzhang
出处:http://jillzhang.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://jillzhang.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。