Beispiel #1
0
        public override void Run()
        {
            var cached = true;

            this.searchResult = state.GetOrAddNeedle(needle, () =>
            {
                cached            = false;
                var image         = state.Image(needle.Key).Clone();
                var magnification = 0.1;
                image.Resize(new Percentage(magnification * 100));

                var result = FindHighEntropyStrip(image, needle.Gravity, NeedleSize * magnification, this);

                result.Point.X /= magnification;
                result.Point.Y /= magnification;
                return(result);
            });

            var resultLabel = $"Not found ({searchResult.Entropy})";

            if (searchResult.MeetsThreshold())
            {
                resultLabel = $"Found at ({searchResult.Point}), {searchResult.Entropy}";
            }
            Complete(resultLabel, cached);
        }
Beispiel #2
0
        public override void ShowPreview(Renderer renderer)
        {
            var image      = state.Image(needle.Key).Clone();
            var searchArea = NeedleSearchArea(image, needle.Gravity);
            var rows       = searchArea.Item1;
            var columns    = searchArea.Item2;

            var minX = columns.Min();
            var maxX = columns.Max();
            var minY = rows.Min();
            var maxY = rows.Max();

            var preview = image;
            var rect    = new Drawables()
                          .StrokeWidth(2)
                          .StrokeColor(new MagickColor("yellow"))
                          .FillOpacity(new Percentage(0))
                          .Rectangle(minX, minY, maxX, maxY);

            preview.Draw(rect);

            if (searchResult != null)
            {
                var needleRect = new Drawables()
                                 .StrokeWidth(2)
                                 .StrokeColor(new MagickColor(searchResult.MeetsThreshold() ? "green" : "red"))
                                 .FillOpacity(new Percentage(0))
                                 .Rectangle(searchResult.Point.X, searchResult.Point.Y, searchResult.Point.X + NeedleSize, searchResult.Point.Y + NeedleSize);
                preview.Draw(needleRect);
            }

            renderer.DisplayImages(preview);
        }