private void GenerateGif(object sender, DoWorkEventArgs e) { GifArgument argument = e.Argument as GifArgument; AnimatedGifEncoder encoder = new AnimatedGifEncoder(); encoder.Start(argument.outputFilePath); encoder.SetDelay(argument.frameRate); encoder.SetRepeat(0); // generate gif for (int i = 0; i < argument.fileList.Count; i++) { if (worker.CancellationPending) { e.Cancel = true; return; } encoder.AddFrame(System.Drawing.Image.FromFile(argument.fileList[i])); if (i == argument.fileList.Count - 1) { worker.ReportProgress(100); } else { worker.ReportProgress((int)(100.0 * i / argument.fileList.Count)); } } e.Result = argument.outputFilePath; }
private void Generate_Button_Click(object sender, RoutedEventArgs e) { if (!targetTextBox.Text.EndsWith(".gif")) { targetTextBox.Text += ".gif"; } string outputFilePath = targetTextBox.Text; // 时间间隔设定 int frameStepTime; if (!int.TryParse(frameTextBox.Text, out frameStepTime)) { frameStepTime = 500; } frameTextBox.Text = frameStepTime.ToString(); var files = new List <string>(); foreach (var item in fileList.Items) { files.Add((string)item); } var argument = new GifArgument() { outputFilePath = outputFilePath, frameRate = frameStepTime, fileList = files }; worker = new BackgroundWorker() { WorkerReportsProgress = true, WorkerSupportsCancellation = true }; worker.DoWork += GenerateGif; worker.RunWorkerCompleted += OnGifCompleted; worker.ProgressChanged += Worker_ProgressChanged; worker.RunWorkerAsync(argument); LockUIElements(); }