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); }
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); }