Поиск изображения на экране - C#
Формулировка задачи:
Нужно сделать метод, который будет искать на экране определённое изображение. Ни в каком месте, ни размер изображения нам заранее не известны (каждый раз по разному). Я уже сделал такой метод, который находит его по пиксельно , но это очень долго. Есть ли другой способ или как можно оптимизировать мой метод.
Я слышал, что как то можно по байтам определять.
public static Boolean Picture_In(Bitmap pic) { int a = 0; Boolean bol = false; Pixel p = new Pixel(); Point point = new Point(0, 0); Bitmap screen = p.GetScreen(); while (a++ < (SystemInformation.PrimaryMonitorSize.Width - (pic.Width - 1)) * (SystemInformation.PrimaryMonitorSize.Height - (pic.Height - 1))) { point = Pixel_In(0, point.Y, SystemInformation.PrimaryMonitorSize.Width - pic.Width, SystemInformation.PrimaryMonitorSize.Height - pic.Height, pic.GetPixel(0, 0)); if (point != new Point(0, 0)) { bol = true; for (int i = 0; i < pic.Height; i++) { for (int n = 0; n < pic.Width; n++) { if (screen.GetPixel(point.X + n, point.Y + i) == pic.GetPixel(n, i)) { bol &= true; } else { bol = false; screen.SetPixel(point.X, point.Y, Color.Blue); break; } } if (!bol) break; } } if (point == new Point(0, 0)) break; if (bol) return bol; } return bol; }
Решение задачи: «Поиск изображения на экране»
textual
Листинг программы
using System; using System.Runtime.InteropServices; using System.Drawing; using System.Drawing.Imaging; ... static void CopyExample ( ) { using ( var bmp = new Bitmap( 100, 100 ) ) { // Фиксируем изображение в памяти var bd = bmp.LockBits( new Rectangle( 0, 0, 100, 100 ), ImageLockMode.ReadWrite, bmp.PixelFormat ); // Буфер под размер изображения var buffer = new byte[bd.Stride * bd.Height]; // Копируем байтовое представление изображения // в выделенный буфер Marshal.Copy( bd.Scan0, buffer, 0, buffer.Length ); /* * Выполнение некоторых модификаций над буфером */ // Копируем буфер обратно по адресу расположения // изображения в памяти Marshal.Copy( buffer, 0, bd.Scan0, buffer.Length ); // Разблокируем изображение bmp.UnlockBits( bd ); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д