benshepherd icon

Capture screenshot save as GIF

benshepherd | PRO | 07/15/13 07:33:48 PM UTC | 0 ⭐ | 409 👁️ | Never ⏰ | []
C# |

2.34 KB

|

None

|

0 👍

/

0 👎

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;
using NGif;
 
namespace GifRec
{
    class GifRecorder
    {
        List<Bitmap> frames = new List<Bitmap>();
        Timer timer;
        Rectangle region;
        int iframe = 0;
        int duration = 5;
        int fps = 8;
        int ms = 0;
        string path;
        Action<string> SetText;
        Action<bool> ToggleStart;
 
        public GifRecorder(Rectangle _region, int _duration, Action<string> _SetText, Action<bool> _ToggleStart)
        {
            region = _region;
            duration = _duration;
            SetText = _SetText;
            ToggleStart = _ToggleStart;
 
            path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\GifRec\\";
 
            if (!Directory.Exists(path))
                Directory.CreateDirectory(path);
 
            path += RandomString.Create(5) + ".gif";
        }
 
        public void Start()
        {
            frames.Clear();
 
            timer = new Timer();
            timer.Tick += new EventHandler(timer_Tick);
            timer.Interval = 1000 / fps;
            timer.Enabled = true;
        }
 
        private void timer_Tick(object sender, EventArgs e)
        {
            if (ms / 1000 == duration)
            {
                timer.Enabled = false;
 
                SetText("Creating GIF");
 
                System.Threading.Thread genGifThread = new System.Threading.Thread(GenerateGif);
                genGifThread.Start();
 
                return;
            }
 
            frames.Add(ScreenCap.Crop(ScreenCap.Fullscreen(), region));
 
            SetText("Elapsed time " + (ms / 1000 + 1));
 
            ms += 1000 / fps;
        }
 
        private void GenerateGif()
        {
            AnimatedGifEncoder e = new AnimatedGifEncoder();
            e.Start(path);
            e.SetDelay(1000 / fps);
            e.SetQuality(50);
 
            for (int i = 0; i < frames.Count; i++)
            {
                e.AddFrame((Image)frames[i]);
            }
 
            e.Finish();
 
            SetText("Done");
            Taskbar.Balloon(path, "GIF Saved");
            ToggleStart(true);
        }
    }
}

Comments