Exemple #1
0
        // 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);
        }