public Guid Process(Bitmap left, Bitmap right, int threshold)
        {
            if (left == null)
            {
                throw new ArgumentNullException(nameof(left));
            }

            if (right == null)
            {
                throw new ArgumentNullException(nameof(right));
            }

            _painter.DrawDifferences(left, _comparer.GetDifferences(left, right, threshold));
            return(_imageStorage.Create(new BitmapAndLock(left, new object())));
        }
        public void SaveAndLoad_ImageIsNotNull_ImageReturned()
        {
            var result = _imageStorage.Read(_imageStorage.Create(new BitmapAndLock(_image, _lockObject)));

            Assert.NotNull(result);
            Assert.AreEqual(_image.Size, result.Bitmap.Size);
            for (var xIndex = 0; xIndex < _image.Width; xIndex++)
            {
                for (var yIndex = 0; yIndex < _image.Height; yIndex++)
                {
                    Assert.AreEqual(_image.GetPixel(xIndex, yIndex).ToArgb(),
                                    result.Bitmap.GetPixel(xIndex, yIndex).ToArgb());
                }
            }
        }