如何在内存中将Png文件转换为Gif?

时间:2013-01-28 17:37:19

标签: c#

这是代码:

if (Form1.sf != null)
            {
                radarDI = new DirectoryInfo(Form1.sf);
                radarFiles = radarDI.GetFiles("*.png");
                for (int i = radarFiles.Length - 1; i >= 0; i--)
                {
                    radarImage = Image.FromFile(radarFiles[i].Name);
                    radarImage.Save(FileName, System.Drawing.Imaging.ImageFormat.Gif);
                    myGifListRadar.Add(radarFiles[i].Name);
                    if (myGifListRadar.Count == 5)
                    {
                        break;
                    }
                }
                radar_animation.MakeGIF(myGifListRadar, @"d:\RadarGifAnimatoion.gif", 8, true);
            }

我想将所有png文件转换为gif。 因为我需要创建动画gif,它只获得gif文件。 所以现在我将png文件保存到硬盘进行转换,然后从硬盘读回gif文件:

radarImage.Save(FileName, System.Drawing.Imaging.ImageFormat.Gif);

FileName应该稍后保存的文件,然后回读使用它。 问题是,是否有任何方法将文件转换为gif而不先将其保存到硬盘?有一些更快的方法然后将文件保存到硬盘转换然后再次以FileInfo再次读取它们?

刚刚更新:

using (var ms = new MemoryStream())
            {
                if (Form1.sf != null)
                {
                    radarDI = new DirectoryInfo(Form1.sf);
                    radarFiles = radarDI.GetFiles("*.png");
                    for (int i = radarFiles.Length - 1; i >= 0; i--)
                    {
                        radarImage = Image.FromFile(radarFiles[i].FullName);
                        radarImage.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                        myGifListRadar.Add(radarFiles[i].Name);
                        if (myGifListRadar.Count == 5)
                        {
                            break;
                        }
                    }
                }
                radar_animation.MakeGIF(myGifListRadar, @"d:\RadarGifAnimatoion.gif", 8, true);
            }

但现在这一部分:

radarImage.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                            myGifListRadar.Add(radarFiles[i].Name);

myGifListRadar是List我如何将radarImage作为字符串文件名添加到List?

1 个答案:

答案 0 :(得分:4)

使用Image.Save(Stream, ImageFormat)

using (var ms = new MemoryStream)
{
    radarImage.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
    // do something with ms
}

根据您制作包含多个框架的GIF的方式,这可能是不必要的 - 您是否可以单独使用Image并直接制作多帧GIF而不是制作单独的GIF然后合并它们?