如果你在寻找可控制起始时间和持续时间作为参数的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控件。