EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

C#简单方式生成GIF

如果你在寻找可控制起始时间和持续时间作为参数的GIF生成方法,我还是劝你早点罢手吧。(顺带一提,如果你还想把多个gif合成一个gif也是不可行的,至少没有那么现成的方法。)归根到底,最原始的还是只有Delay这一个参数。

首先,你需要到Nuget管理器里面搜索安装AnimatedGif。然后照着我这么写就完事了。

private void btnGIF_Click(object sender, EventArgs e)
{
     OpenFileDialog ofd = new OpenFileDialog();
     ofd.Filter = "Images|*.png;*.jpg"; ;
     ofd.Multiselect = true;
     if(ofd.ShowDialog()==DialogResult.OK)
     {
       this.lstResults.Items.Clear();
       this.lstResults.Items.Add("Start generating GIF files");
       GeneraterGif(ofd.FileNames);
       this.lstResults.Items.Add("Finishied.... \r\n");
     }
}

private void GeneraterGif(string[] imgList)
{
     if (imgList == null)
     {
        return;            
     }

     int delay = 300;

     string filePath = GetFolderPath(imgList[0]);
     string resultFilePath = filePath + "\\result.gif";

     this.lstResults.Items.Add("Output Directory:"+resultFilePath);

     using(var gif = AnimatedGif.AnimatedGif.Create(resultFilePath, delay))
     {
       foreach(string imgPath in imgList)
       {
         var img = Image.FromFile(imgPath);
         gif.AddFrame(img, delay:delay,quality:AnimatedGif.GifQuality.Bit8) ;
       }
     }
}

private string GetFolderPath(string filePath)
{
     int index = filePath.LastIndexOf('\\');
     return filePath.Substring(0, index);
}

其它改写你自己调试。

lstResults是ListBox控件。

This article was last edited at 2023-05-01 13:31:51

* *