AVCaptureVideoPreviewLayer: взятие снимка

Я пытаюсь эмулировать анимацию, замеченную в приложении для камеры по умолчанию, где снимок видоискателя камер анимирован в угол дисплея приложений.

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

- (id)initWithLayer:(id)layer

.. возвращает пустой слой, без снимка изображения, так ясно существует некоторое более глубокое волшебство, продолжающееся здесь.

Ваши подсказки/шиканье приветствуются.

M.

13
задан Martin Cowie 3 August 2010 в 15:10
поделиться

2 ответа

сталкивается с теми же проблемами, но под несколько другим углом.

Вот возможные решения, которые не слишком хороши для IMO:

  • Вы можете добавить к AVCaptureSession как AVCaptureStillImageOutput , так и AVCaptureVideoDataOutput . Когда вы установите sessionPreset на AVCaptureSessionPresetHigh , вы начнете получать кадры через API, а когда вы переключитесь на AVCaptureSessionPresetPhoto , вы сможете делать реальные изображения. Так что прямо перед съемкой вы можете переключиться на видео, получить кадр, а затем вернуться к камере. Главное предостережение заключается в том, что для переключения камеры между видеокамерой и фотоаппаратом требуется «много времени» (несколько секунд).

  • Другой вариант - использовать только вывод камеры ( AVCaptureStillImageOutput ) и использовать UIGetScreenImage для получения снимка экрана телефона. Затем вы можете обрезать элементы управления и оставить только изображение. Это усложняется, если вы показываете элементы управления пользовательского интерфейса над изображением. Кроме того, согласно в этом сообщении, Apple начала отклонять приложения, которые используют эту функцию (это всегда было сомнительно).

  • Помимо этого, я также пробовал поиграть с AVCaptureVideoPreviewLayer . Есть этот пост для сохранения UIView или CALayer в UIImage. Но все это дает четкие или белые изображения. Я попытался получить доступ к слою, слою представления, суперслою , уровню представления , уровню модели , но безуспешно.Я полагаю, что данные в AVCaptureVideoPreviewLayer являются очень внутренними и не являются частью инфраструктуры обычного уровня.

Надеюсь, это поможет, Одед.

22
ответ дан 1 December 2019 в 22:54
поделиться

есть 2 способа захватить кадры предварительного просмотра .. AVCaptureVideoDataOutput и AVCaptureStillImageOutput :)

ваш сеанс захвата настроен для захвата видеокадров, а затем сделать свой слой с cgimage из выбранный кадр. если он настроен для неподвижных изображений, дождитесь получения неподвижного изображения и сделайте свой слой из уменьшенной версии этого cgimage. если у вас еще нет вывода на ваш сеанс, вам придется добавить его, я думаю.

0
ответ дан 1 December 2019 в 22:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: