Самый быстрый способ получить пиксель / точечный цвет содержимого экрана на iOS - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь получить цвет пикселей / точек (не имеет значения для моего варианта использования) текущего содержимого экрана в iOS. Так, например, я хочу получить цвет каждого пикселя от координат экрана 0, 0 до 10, 10. Кроме того, операция должна быть максимально быстрой, поскольку я буду делать это через равные промежутки времени как таймер. Таймер должен работать несколько раз в секунду, но он не должен быть 25fps.

Приемлемые решения: все, что возвращает текущий цвет пикселя или точки на экране в заданной позиции, не производит заметная задержка пользовательского интерфейса и не превращает мое приложение в заряд батареи. Результатом может быть CGImage, UIImage, буферный массив, мне все равно. Меня также не волнует, использует ли решение дополнительные фреймворки Apple, такие как OpenGL или Metal.
Также допустимо, если решение не захватывает системный пользовательский интерфейс, такой как строка состояния. Захват содержимого моего приложения достаточен.

То, что я пробовал до сих пор:

  • Использование UIWindow s drawHierarchy(in:afterScreenUpdates:). Этот метод оказывается слишком медленным. На моем iPad Pro потребовалось 0,25 с, что вызывает заметную задержку пользовательского интерфейса.
  • Использование CALayer с render(in:), но этот метод не отображает UIVisualEffectView с, что мне требуется. Кроме того, хотя он был быстрее, чем drawHierarchy, я измерил его примерно на 0,04 с, что все еще вызывает заметную задержку в пользовательском интерфейсе.
  • Используйте OpenGL, как, например, описано здесь . Я ничего не знаю об OpenGL, поэтому, возможно, я использовал это неправильно, но я никогда не получал ничего, кроме черного изображения.
...