Exemple #1
0
 public PreviewFeature(string name, CWatchZone watchZone, CWatcher watcher, CWatchImage watchImage)
 {
     Name       = name;
     WatchZone  = watchZone;
     Watcher    = watcher;
     WatchImage = watchImage;
 }
        private static void CompareAgainstFeature(
            ref double[] deltas,
            ref double[] benchmarks,
            DateTime now,
            IMagickImage fileImageComposed,
            CWatcher cWatcher,
            CWatchImage cWatchImage)
        {
            if (!cWatchImage.IsPaused(now))
            {
                var benchmark = TimeStamp.Now;
                using (var fileImageCompare = fileImageComposed.Clone())
                    using (var deltaImage = cWatchImage.MagickImage.Clone())
                    {
                        if (cWatchImage.HasAlpha)
                        {
                            fileImageCompare.Composite(cWatchImage.AlphaChannel, CompositeOperator.Over);
                        }

                        SetDelta(ref deltas, fileImageCompare, deltaImage, cWatcher, cWatchImage);
                        SetBenchmark(ref benchmarks, benchmark, cWatchImage);
                    }
            }
            else
            {
                deltas[cWatchImage.Index]     = double.NaN;
                benchmarks[cWatchImage.Index] = 0;
            }
        }
        private static void SetDelta(
            ref double[] deltas,
            IMagickImage fileImageCompare,
            IMagickImage deltaImage,
            CWatcher cWatcher,
            CWatchImage cWatchImage)
        {
            var metricResult = fileImageCompare.Compare(deltaImage, cWatcher.ErrorMetric);

            deltas[cWatchImage.Index] = cWatcher.ErrorMetric.Standardize(
                cWatchImage.MetricUpperBound,
                metricResult,
                cWatchImage.TransparencyRate);
        }
        private static void ComposeScan(
            ref double[] deltas,
            ref double[] benchmarks,
            DateTime now,
            Bitmap fileImageCropped,
            Bitmap prevFileImageCropped,
            CWatcher cWatcher)
        {
            if (!cWatcher.IsPaused(now))
            {
                using (var fileImageComposed = GetComposedImage(fileImageCropped, cWatcher.Channel, cWatcher.ColorSpace))
                    using (var prevFileImageComposed = GetComposedImage(prevFileImageCropped, cWatcher.Channel, cWatcher.ColorSpace))
                    {
                        if (cWatcher.Equalize)
                        {
                            fileImageComposed.Equalize();
                            prevFileImageComposed?.Equalize();
                        }

                        if (cWatcher.IsStandard)
                        {
                            foreach (var cWatchImage in cWatcher.CWatchImages)
                            {
                                CompareAgainstFeature(ref deltas, ref benchmarks, now, fileImageComposed, cWatcher, cWatchImage);
                            }
                        }
                        else if (cWatcher.IsDuplicateFrame)
                        {
                            CompareAgainstPreviousFrame(ref deltas, ref benchmarks, now, fileImageComposed, prevFileImageComposed, cWatcher);
                        }
                        else
                        {
                            throw new NotImplementedException("How'd you get here?");
                        }
                    }
            }
            else
            {
                foreach (var cWatchImage in cWatcher.CWatchImages)
                {
                    deltas[cWatchImage.Index]     = double.NaN;
                    benchmarks[cWatchImage.Index] = 0;
                }
            }
        }
        private static void CompareAgainstPreviousFrame(
            ref double[] deltas,
            ref double[] benchmarks,
            DateTime now,
            IMagickImage fileImageComposed,
            IMagickImage prevFileImageComposed,
            CWatcher cWatcher)
        {
            var cWatchImage = cWatcher.CWatchImages[0];

            if (!cWatchImage.IsPaused(now) && prevFileImageComposed != null)
            {
                var benchmark = TimeStamp.Now;
                SetDelta(ref deltas, fileImageComposed, prevFileImageComposed, cWatcher, cWatchImage);
                SetBenchmark(ref benchmarks, benchmark, cWatchImage);
            }
            else
            {
                deltas[cWatchImage.Index]     = double.NaN;
                benchmarks[cWatchImage.Index] = 0;
            }
        }