从gif动画图像中导出桢的方法实现
近几天,一直在搞gif文件格式,在网上找到一个,正在分析。可以说gif图像在几种图像格式里面算是比较复杂的了,废话少说,先实现一个从gif动画里面导出桢来的方法:
效果如下:
原来gif动画图像:![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/logo2.gif)
导出来的图像:
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/0aa71e18-8f9d-4f5a-917e-70ec4bb81c60.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/2b6cbec9-fedf-4bcd-92cd-86d43d53bc96.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/4ea63911-cb8d-4298-bc9f-f6705aabcb5e.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/7af620d4-f230-48a4-bdd1-fcaba7531571.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/885bc31c-1e92-49df-b69a-c9fd320c3909.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/882608d0-533f-441e-8faa-230e288e1d16.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/a01c8c48-f570-4530-b244-8f5fe00f0372.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/bb58b224-9546-4695-9ced-8421d40602ad.jpg)
代码:
本来想在SelectActiveFrame后像处理jpeg图像一样黑白,但是SelectActiveFrame执行后,上次的修改都变成无效的了,郁闷。SaveAdd方法也不能用于gif格式。系统只提供了gif的解码器,却没有提高编码器。晕倒。
自己从网上找了一个,正在学习
效果如下:
原来gif动画图像:
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/logo2.gif)
导出来的图像:
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/0aa71e18-8f9d-4f5a-917e-70ec4bb81c60.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/2b6cbec9-fedf-4bcd-92cd-86d43d53bc96.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/4ea63911-cb8d-4298-bc9f-f6705aabcb5e.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/7af620d4-f230-48a4-bdd1-fcaba7531571.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/885bc31c-1e92-49df-b69a-c9fd320c3909.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/882608d0-533f-441e-8faa-230e288e1d16.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/a01c8c48-f570-4530-b244-8f5fe00f0372.jpg)
![](https://www.cnblogs.com/images/cnblogs_com/jillzhang/bb58b224-9546-4695-9ced-8421d40602ad.jpg)
代码:
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
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
本来想在SelectActiveFrame后像处理jpeg图像一样黑白,但是SelectActiveFrame执行后,上次的修改都变成无效的了,郁闷。SaveAdd方法也不能用于gif格式。系统只提供了gif的解码器,却没有提高编码器。晕倒。
自己从网上找了一个,正在学习
作者:jillzhang
出处:http://jillzhang.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://jillzhang.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。