// Return the point within a bitmap that matches 'target' the closest private Point FindTargetColour(Bitmap bitmap, RGB target, out int distance) { Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height); BitmapData bm = bitmap.LockBits(rect, ImageLockMode.ReadOnly, bitmap.PixelFormat); Point pt = new Point(0, 0); distance = int.MaxValue; unsafe { //Bitmap test_bm = new Bitmap(rect.Width, rect.Height, bm.PixelFormat); RGB *px = (RGB *)bm.Scan0.ToPointer(); for (int y = 0; y != bitmap.Height; ++y) { RGB *col = px + y * bitmap.Width; for (int x = 0; x != bitmap.Width; ++x, ++col) { //test_bm.SetPixel(x,y,Color.FromArgb(0xff, col->r, col->g, col->b)); int distsq = RGB.DistanceSq(target, *col); if (distsq < distance) { pt.X = x; pt.Y = y; distance = distsq; } } } //test_bm.Save("D:/deleteme/screen_grap2.bmp"); } bitmap.UnlockBits(bm); distance = (int)Math.Sqrt(distance); return(pt); }