Я пытаюсь эмулировать анимацию, замеченную в приложении для камеры по умолчанию, где снимок видоискателя камер анимирован в угол дисплея приложений.
Объект AVCaptureVideoPreviewLayer, который удерживает клавишу к решению этой проблемы, не очень открыт для этих требований: попытка создать копию его в новом слое с..
- (id)initWithLayer:(id)layer
.. возвращает пустой слой, без снимка изображения, так ясно существует некоторое более глубокое волшебство, продолжающееся здесь.
Ваши подсказки/шиканье приветствуются.
M.
сталкивается с теми же проблемами, но под несколько другим углом.
Вот возможные решения, которые не слишком хороши для IMO:
Вы можете добавить к AVCaptureSession как AVCaptureStillImageOutput , так и AVCaptureVideoDataOutput . Когда вы установите sessionPreset на AVCaptureSessionPresetHigh , вы начнете получать кадры через API, а когда вы переключитесь на AVCaptureSessionPresetPhoto , вы сможете делать реальные изображения. Так что прямо перед съемкой вы можете переключиться на видео, получить кадр, а затем вернуться к камере. Главное предостережение заключается в том, что для переключения камеры между видеокамерой и фотоаппаратом требуется «много времени» (несколько секунд).
Другой вариант - использовать только вывод камеры ( AVCaptureStillImageOutput ) и использовать UIGetScreenImage для получения снимка экрана телефона. Затем вы можете обрезать элементы управления и оставить только изображение. Это усложняется, если вы показываете элементы управления пользовательского интерфейса над изображением. Кроме того, согласно в этом сообщении, Apple начала отклонять приложения, которые используют эту функцию (это всегда было сомнительно).
Помимо этого, я также пробовал поиграть с AVCaptureVideoPreviewLayer . Есть этот пост для сохранения UIView или CALayer в UIImage. Но все это дает четкие или белые изображения. Я попытался получить доступ к слою, слою представления, суперслою , уровню представления , уровню модели , но безуспешно.Я полагаю, что данные в AVCaptureVideoPreviewLayer являются очень внутренними и не являются частью инфраструктуры обычного уровня.
Надеюсь, это поможет, Одед.
есть 2 способа захватить кадры предварительного просмотра .. AVCaptureVideoDataOutput и AVCaptureStillImageOutput :)
ваш сеанс захвата настроен для захвата видеокадров, а затем сделать свой слой с cgimage из выбранный кадр. если он настроен для неподвижных изображений, дождитесь получения неподвижного изображения и сделайте свой слой из уменьшенной версии этого cgimage. если у вас еще нет вывода на ваш сеанс, вам придется добавить его, я думаю.