效果如下:
原来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
}
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
}本来想在SelectActiveFrame后像处理jpeg图像一样黑白,但是SelectActiveFrame执行后,上次的修改都变成无效的了,郁闷。SaveAdd方法也不能用于gif格式。系统只提供了gif的解码器,却没有提高编码器。晕倒。
自己从网上找了一个,正在学习
