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

Jho*_*rdy 0 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);
            }
Run Code Online (Sandbox Code Playgroud)

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

radarImage.Save(FileName, System.Drawing.Imaging.ImageFormat.Gif);
Run Code Online (Sandbox Code Playgroud)

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);
            }
Run Code Online (Sandbox Code Playgroud)

但现在这部分:

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

myGifListRadar 是列表我现在如何将radarImage 作为字符串文件名添加到列表中?

Tim*_* S. 5

使用Image.Save(Stream, ImageFormat)

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

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