Here's my method. Maybe someone need. Works quickly.
Point IndexOfImage(Bitmap bmp1, Bitmap bmp2)
{
Point retP = new Point(-1, -1);
int bw = bmp1.Width;
int bh = bmp1.Height;
int bw2 = bmp2.Width;
int bh2 = bmp2.Height;
if ((bw < bw2) || (bh < bh2)) return retP;
//------------------------------------
Bitmap bmp = new Bitmap(bw2, bh2);
Rectangle rect = new Rectangle(0, 0, bmp1.Width, bmp1.Height);
System.Drawing.Imaging.BitmapData bmpData = bmp1.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
IntPtr ptr = bmpData.Scan0;
int bytes = bmpData.Stride \* bmp1.Height;
byte\[\] rgbValues = new byte\[bytes\];
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
//------------------------------------
Rectangle rect2 = new Rectangle(0, 0, bmp2.Width, bmp2.Height);
System.Drawing.Imaging.BitmapData bmpData2 = bmp2.LockBits(rect2, System.Drawing.Imaging.ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
IntPtr ptr2 = bmpData2.Scan0;
int bytes2 = bmpData2.Stride \* bmp2.Height;
int bm = bytes2;
byte\[\] rgbValues2 = new byte\[bytes2\];
System.Runtime.InteropServices.Marshal.Copy(ptr2, rgbValues2, 0, bytes2);
//------------------------------------
int i = -1, j = 0, i2 = -1, j2 = 0, ind\_f = 0;
int f = 0;
int realx, realx2;
i = -1;
j = 0;
for (int y = 0; y < bh - bh2 + 1; y++)
{
j = 0;
realx = 0;
for (int x = 0; x < bw \* 3 - bw2 \* 3; x++)
{
i++;
j++;
if (j == 4)
{
j = 1;
realx++;
}
if (j == 1)
{
bm = 0;
i2 = -1;
j2 = 0;
int y2 = 0;
realx2 = 0;
f = 0;
while (y2 < bh2)
{
i2++;
j2++;
if (j2