0

这是代码:

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 将它们作为 gif 再次读取?

刚刚更新:

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 是列表我现在如何将radarImage 作为字符串文件名添加到列表中?

4

1 回答 1

5

使用Image.Save(Stream, ImageFormat)

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

根据您制作多帧 GIF 的方式,这可能是不必要的 - 您可以只取单独Image的 s 并直接制作多帧 GIF,而不是制作单独的 GIF 然后合并它们吗?

于 2013-01-28T17:40:54.503 回答