C # - LockBits - Сравнить изображение внутри другого изображения - PullRequest
0 голосов
/ 07 октября 2018

Извините за плохой английский.Я уже искал в интернете то, что я ищу, но так и не нашел именно того, что мне нужно.

У меня есть этот код, который сравнивает два изображения и возвращает true, если оба изображения равны.

private void button20_Click(object sender, EventArgs e)
{

    Bitmap myBitmap1 = new Bitmap("Images\\img1.png");
    Bitmap myBitmap2 = new Bitmap("Images\\img2.png");

    bool equals = true;
    Rectangle rect = new Rectangle(0, 0, myBitmap1.Width, myBitmap1.Height);
    BitmapData bmpData1 = myBitmap1.LockBits(rect, ImageLockMode.ReadOnly, myBitmap1.PixelFormat);
    BitmapData bmpData2 = myBitmap2.LockBits(rect, ImageLockMode.ReadOnly, myBitmap2.PixelFormat);
    unsafe
    {
        byte* ptr1 = (byte*)bmpData1.Scan0.ToPointer();
        byte* ptr2 = (byte*)bmpData2.Scan0.ToPointer();
        int width = rect.Width * 3; // for 24bpp pixel data
        for (int y = 0; equals && y < rect.Height; y++)
        {
            for (int x = 0; x < width; x++)
            {
                if (*ptr1 != *ptr2)
                {
                    equals = false;
                    break;
                }
                ptr1++;
                ptr2++;
            }
            ptr1 += bmpData1.Stride - width;
            ptr2 += bmpData2.Stride - width;
        }
    }
    myBitmap1.UnlockBits(bmpData1);
    myBitmap2.UnlockBits(bmpData2);
    MessageBox.Show(Convert.ToString(equals));
}

Все отлично работает.

Но как я могу заставить этот код возвращать true, если изображение 1 находится внутри изображения 2?Я имею в виду, мне не нужно проверять, равны ли image1 и image2, мне нужно проверять, могу ли я найти изображение 1 ВНУТРИ изображения 2 !!

И еще, если я найду изображение 1 в изображении 2, как я могуЯ храню в переменной точную координату точки (X, Y) того места, где было найдено изображение 1 на изображении 2?

Идеи?Спасибо

...