这是代码:
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?
答案 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然后合并它们?