using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
+using System.Linq;
using System.Runtime.InteropServices;
+using System.Security.Cryptography;
using System.Threading;
namespace BurageSnap
private readonly Config _config;
private readonly Capture _screenCapture = new Capture();
private readonly RingBuffer _ringBuffer = new RingBuffer();
+ private byte[] _prevHash;
private uint _timerId;
private TimeProc _timeProc;
private readonly object _lockObj = new object();
else
{
_ringBuffer.Size = _config.RingBuffer;
+ var frame = CaptureFrame(true);
+ _prevHash = ComputeHash(frame);
AddFrame(CaptureFrame(true));
}
var dummy = 0u;
if (!Monitor.TryEnter(_lockObj))
return;
var frame = CaptureFrame();
+ var hash = ComputeHash(frame);
+ if (_prevHash != null && hash.SequenceEqual(_prevHash))
+ return;
+ _prevHash = hash;
if (frame == null)
{
timeKillEvent(timerId);
Monitor.Exit(_lockObj);
}
+ private byte[] ComputeHash(Frame frame)
+ {
+ var bmp = frame.Bitmap;
+ var array = (byte[])new ImageConverter().ConvertTo(bmp, typeof(byte[]));
+ return array == null ? null : MD5.Create().ComputeHash(array);
+ }
+
private Frame CaptureFrame(bool initial = false)
{
var bmp = initial