public static TemplateMatch FindOnScreen(string path, float percentage, bool shouldResize, Rectangle cropRect)
{
Console.Beep();
if (ShouldBringToFront) ControlInput.BringHeroesToFront();
var template = ChangePixelFormat(new Bitmap(path), PixelFormat.Format24bppRgb);
var src = GrabScreenGDI(gameScreen);
var sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);
src.Dispose();
if (shouldResize)
{
var rb = new ResizeBilinear(sourceImage.Width/4, sourceImage.Height/4);
sourceImage = rb.Apply(sourceImage);
}
//sourceImage.Save("./images/resized.png");
var ed = new HomogenityEdgeDetector();
if (!cropRect.Size.IsEmpty)
{
var cb = new Crop(cropRect);
sourceImage = cb.Apply(sourceImage);
//sourceImage.Save("./images/resized_cropped.png");
}
//ed.Apply(Grayscale.CommonAlgorithms.BT709.Apply(sourceImage)).Save("./images/EdgeDetection.png");
var tm = new ExhaustiveTemplateMatching(percentage);
var matchings = tm.ProcessImage(sourceImage, template);
var data = sourceImage.LockBits(
new Rectangle(0, 0, sourceImage.Width, sourceImage.Height),
ImageLockMode.ReadWrite, sourceImage.PixelFormat);
TemplateMatch topMatch = null;
foreach (var m in matchings)
{
if (topMatch == null) topMatch = m;
if (m.Similarity > topMatch.Similarity) topMatch = m;
var col = Color.Red;
col = Color.FromArgb((byte) ((int) (m.Similarity*255)), col);
Drawing.Rectangle(data, m.Rectangle, col);
}
sourceImage.UnlockBits(data);
//sourceImage.Save("./images/res.png");
sourceImage.Dispose();
template.Dispose();
GC.Collect();
return topMatch;
}