Example #1
0
        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;
        }
Example #2
0
        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();
        }