Перейти к основному содержимому

Screen API

Описание​

IDroidScreenAPI предоставляет методы для анализа экрана устройства: поиск изображений, пикселей, получение скриншотов и управление захватом экрана.


Методы​

FindImage​

  • Rectangle FindImage(string imageHash, Rectangle[] rectangles, int confidenceInterval)
    Выполняет поиск изображения по хэшу в указанных областях экрана.

    Параметры:

    • imageHash — хэш изображения, с которым производится сравнение;
    • rectangles — массив областей (Rectangle), в которых выполняется поиск;
    • confidenceInterval — точность совпадения (0–100, где больше — строже совпадение).

    Возвращает:
    Rectangle — область найденного изображения.

  • Rectangle FindImage(string imageHash, Rectangle[] rectangles, int confidenceInterval, int searchTime)
    Выполняет поиск изображения с ограничением по времени.

    Параметры:

    • imageHash — хэш изображения;
    • rectangles — области поиска;
    • confidenceInterval — точность совпадения;
    • searchTime — максимальное время поиска в секундах.

    Возвращает:
    Rectangle — найденная область.

  • Rectangle FindImage(string[] imageHashes, Rectangle[] rectangles, int confidenceInterval)
    Выполняет поиск одного из нескольких изображений.

    Параметры:

    • imageHashes — массив хэшей изображений;
    • rectangles — области поиска;
    • confidenceInterval — точность совпадения.

    Возвращает:
    Rectangle — область первого найденного изображения.

  • Rectangle FindImage(string[] imageHashes, Rectangle[] rectangles, int confidenceInterval, int searchTime)
    Поиск одного из нескольких изображений с ограничением времени.

    Параметры:

    • imageHashes — массив хэшей;
    • rectangles — области поиска;
    • confidenceInterval — точность совпадения;
    • searchTime — максимальное время поиска в секундах.

    Возвращает:
    Rectangle — найденная область.

Пример.​

var screen = instance.DroidInstance.Screen;

var hash = project.Variables["imageHash"].Value; // Хэш эталонного изображения
var areas = new[] { new Rectangle(0, 0, 720, 1280) }; // Где искать - здесь весь экран

var found = screen.FindImage(hash, areas, 90); // Точность совпадения 90
if (found.IsEmpty)
throw new Exception("Изображение не найдено");

var waited = screen.FindImage(hash, areas, 90, 10); // Ждать появления до 10 секунд

FindImageBlackWhite​

  • Rectangle FindImageBlackWhite(string imageHash, Rectangle[] rectangles, int confidenceInterval, int threshold)
    Поиск изображения в чёрно-белом режиме.

    Параметры:

    • imageHash — хэш изображения;
    • rectangles — области поиска;
    • confidenceInterval — точность совпадения;
    • threshold — порог бинаризации.

    Возвращает:
    Rectangle — область найденного изображения.

  • Rectangle FindImageBlackWhite(string imageHash, Rectangle[] rectangles, int confidenceInterval, int threshold, int searchTime)
    Ч/б поиск с таймаутом.

    Параметры:

    • imageHash — хэш;
    • rectangles — области;
    • confidenceInterval — точность;
    • threshold — порог;
    • searchTime — максимальное время поиска в секундах.

    Возвращает:
    Rectangle — область найденного изображения.

  • Rectangle FindImageBlackWhite(string[] imageHashes, Rectangle[] rectangles, int confidenceInterval, int threshold)
    Поиск нескольких изображений в ч/б.

    Параметры:

    • imageHashes — массив хэшей;
    • rectangles — области;
    • confidenceInterval — точность;
    • threshold — порог.

    Возвращает:
    Rectangle — область найденного изображения.

  • Rectangle FindImageBlackWhite(string[] imageHashes, Rectangle[] rectangles, int confidenceInterval, int threshold, int searchTime)
    Ч/б поиск нескольких изображений с таймаутом.

    Параметры:

    • imageHashes — массив;
    • rectangles — области;
    • confidenceInterval — точность;
    • threshold — порог;
    • searchTime — максимальное время поиска в секундах.

    Возвращает:
    Rectangle — область найденного изображения.

Пример.​

var screen = instance.DroidInstance.Screen;

var hash = project.Variables["imageHash"].Value; // Хэш эталонного изображения
var areas = new[] { new Rectangle(0, 0, 720, 1280) }; // Область поиска

var found = screen.FindImageBlackWhite(hash, areas, 90, 128); // Порог бинаризации 128
if (found.IsEmpty)
throw new Exception("Изображение не найдено");

FindImageGrayscale​

  • Rectangle FindImageGrayscale(string imageHash, Rectangle[] rectangles, int confidenceInterval)
    Поиск изображения в оттенках серого.

    Параметры:

    • imageHash — хэш;
    • rectangles — области;
    • confidenceInterval — точность.

    Возвращает:
    Rectangle — область найденного изображения.

  • Rectangle FindImageGrayscale(string imageHash, Rectangle[] rectangles, int confidenceInterval, int searchTime)
    Поиск grayscale с таймаутом.

    Параметры:

    • imageHash — хэш;
    • rectangles — области;
    • confidenceInterval — точность;
    • searchTime — максимальное время поиска в секундах.

    Возвращает:
    Rectangle — область найденного изображения.

  • Rectangle FindImageGrayscale(string[] imageHashes, Rectangle[] rectangles, int confidenceInterval)
    Поиск нескольких изображений в grayscale.

    Параметры:

    • imageHashes — массив;
    • rectangles — области;
    • confidenceInterval — точность.

    Возвращает:
    Rectangle — область найденного изображения.

  • Rectangle FindImageGrayscale(string[] imageHashes, Rectangle[] rectangles, int confidenceInterval, int searchTime)
    Поиск grayscale с таймаутом.

    Параметры:

    • imageHashes — массив;
    • rectangles — области;
    • confidenceInterval — точность;
    • searchTime — максимальное время поиска в секундах.

    Возвращает:
    Rectangle — область найденного изображения.

Пример.​

var screen = instance.DroidInstance.Screen;

var hash = project.Variables["imageHash"].Value; // Хэш эталонного изображения
var areas = new[] { new Rectangle(0, 0, 720, 1280) }; // Область поиска

var found = screen.FindImageGrayscale(hash, areas, 90); // Сравнение в оттенках серого
if (found.IsEmpty)
throw new Exception("Изображение не найдено");

FindPixel​

  • Point FindPixel(Color color, Rectangle[] rectangles, int variation)
    Ищет пиксель заданного цвета.

    Параметры:

    • color — искомый цвет (Color);
    • rectangles — области поиска;
    • variation — допустимое отклонение цвета.

    Возвращает:
    Point — координаты найденного пикселя.

  • Point FindPixel(Color color, Rectangle[] rectangles, int variation, int searchTime)
    Поиск пикселя с ограничением времени.

    Параметры:

    • color — цвет;
    • rectangles — области поиска;
    • variation — отклонение цвета;
    • searchTime — максимальное время поиска в секундах.

    Возвращает:
    Point — координаты найденного пикселя.

  • Point FindPixel(string htmlColor, Rectangle[] rectangles, int variation)
    Ищет пиксель по цвету в HTML-формате.

    Параметры:

    • htmlColor — цвет в формате строки (например #FF0000);
    • rectangles — области поиска;
    • variation — допустимое отклонение.

    Возвращает:
    Point — координаты найденного пикселя.

  • Point FindPixel(string htmlColor, Rectangle[] rectangles, int variation, int searchTime)
    Поиск HTML-цвета с таймаутом.

    Параметры:

    • htmlColor — цвет;
    • rectangles — области поиска;
    • variation — отклонение;
    • searchTime — максимальное время поиска в секундах.

    Возвращает:
    Point — координаты найденного пикселя.

Пример.​

var screen = instance.DroidInstance.Screen;

var areas = new[] { new Rectangle(0, 0, 720, 1280) }; // Область поиска

var point = screen.FindPixel("#FF0000", areas, 10); // Красный пиксель, допуск 10
if (point.IsEmpty)
throw new Exception("Пиксель не найден");

var waited = screen.FindPixel(Color.Red, areas, 10, 10); // То же, но ждать до 10 секунд

FindPixels​

  • Point FindPixels(Color[] colors, Rectangle[] rectangles, int variation)
    Ищет пиксель из набора цветов.

    Параметры:

    • colors — массив цветов;
    • rectangles — области поиска;
    • variation — допустимое отклонение.

    Возвращает:
    Point — координаты найденного пикселя.

  • Point FindPixels(Color[] colors, Rectangle[] rectangles, int variation, int searchTime)
    Поиск одного из цветов с ограничением времени.

    Параметры:

    • colors — массив цветов;
    • rectangles — области поиска;
    • variation — отклонение;
    • searchTime — максимальное время поиска в секундах.

    Возвращает:
    Point — координаты найденного пикселя.

  • Point FindPixels(string[] htmlColors, Rectangle[] rectangles, int variation)
    Ищет пиксель из набора HTML-цветов.

    Параметры:

    • htmlColors — массив цветов в строковом формате;
    • rectangles — области поиска;
    • variation — отклонение.

    Возвращает:
    Point — координаты найденного пикселя.

  • Point FindPixels(string[] htmlColors, Rectangle[] rectangles, int variation, int searchTime)
    Поиск HTML-цветов с таймаутом.

    Параметры:

    • htmlColors — массив цветов;
    • rectangles — области поиска;
    • variation — отклонение;
    • searchTime — максимальное время поиска в секундах.

    Возвращает:
    Point — координаты найденного пикселя.

Пример.​

var screen = instance.DroidInstance.Screen;

var areas = new[] { new Rectangle(0, 0, 720, 1280) }; // Область поиска
var colors = new[] { "#FF0000", "#00FF00" }; // Подойдёт любой из цветов

var point = screen.FindPixels(colors, areas, 10);
if (point.IsEmpty)
throw new Exception("Ни один из цветов не найден");

GetScreenSize​

  • Size GetScreenSize()
    Возвращает реальное разрешение экрана устройства в пикселях. Это физическое разрешение, о котором сообщает устройство, а не размер полученного изображения захвата, поэтому именно в этих координатах работают тач, свайп и операции с пикселями.

    Возвращает:
    Size — ширина и высота экрана в пикселях.

Пример.​

var size = instance.DroidInstance.Screen.GetScreenSize();
project.SendInfoToLog($"Разрешение экрана: {size.Width}x{size.Height}");
примечание

Значение кэшируется для устройства. После изменения разрешения (например, командой wm size WidthxHeight) вызовите ResetScreen(), чтобы оно было прочитано заново.


RefreshScreen​

  • void RefreshScreen()
    Обновляет изображение на экране. Используется если выбран тип захвата экрана, который требует ручного обновления (captureScreenMethod = "off").

Пример.​

var screen = instance.DroidInstance.Screen;

instance.DroidInstance.Action.Start("off"); // Запустить устройство без постоянного захвата
screen.RefreshScreen(); // Обновить изображение вручную

ResetScreen​

  • void ResetScreen()
    Сбрасывает параметры захвата экрана и запускает новый процесс захвата. Используется для перезапуска захвата при изменении условий (например, при смене разрешения экрана командой wm size WidthxHeight).

Пример.​

var screen = instance.DroidInstance.Screen;

instance.DroidInstance.Input.RootShell("wm size 720x1280"); // Сменить разрешение экрана
screen.ResetScreen(); // Перезапустить захват под новое разрешение

ScreenshotAsArray​

  • byte[] ScreenshotAsArray()
    Делает скриншот всего экрана.

    Возвращает:
    Массив байтов изображения.

Пример.​

var data = instance.DroidInstance.Screen.ScreenshotAsArray();
using (var ms = new MemoryStream(data))
using (var bmp = new Bitmap(ms))
bmp.Save(project.Path + "myScreen.png");
  • byte[] ScreenshotAsArray(Rectangle area)
    Делает скриншот указанной области.

    Параметры:

    • area — область экрана.

    Возвращает:
    Массив байтов.


ScreenshotAsBase64String​

  • string ScreenshotAsBase64String()
    Делает скриншот экрана.

    Возвращает:
    Строку Base64.

  • string ScreenshotAsBase64String(Rectangle area)
    Делает скриншот области.

    Параметры:

    • area — область экрана.

    Возвращает:
    Base64 строку.

Пример.​

var screen = instance.DroidInstance.Screen;

var base64 = screen.ScreenshotAsBase64String(); // Весь экран
var area = screen.ScreenshotAsBase64String(new Rectangle(0, 0, 300, 300)); // Только область

var data = Convert.FromBase64String(base64);
using (var ms = new MemoryStream(data))
using (var bmp = new Bitmap(ms))
bmp.Save(project.Path + "myScreen.png");

SetCaptureScreenQuality​

  • void SetCaptureScreenQuality(int quality)
    Устанавливает качество захвата.

    Параметры:

    • quality — уровень качества (влияет на скорость и точность). Допустимые значения от 0 до 10.

Пример.​

var screen = instance.DroidInstance.Screen;

screen.SetCaptureScreenQuality(10); // Максимальное качество - точнее поиск, но медленнее
screen.SetCaptureScreenQuality(0); // Минимальное качество - быстрее