цифровой зум камеры в iOS 4.0 и более поздних версиях

как я могу реализовать ползунок цифрового зума для камеры. Я использую следующие API: AVCaptureVideoPreviewLayer, AVCaptureSession, AVCaptureVideoDataOutput, AVCaptureDeviceInput.

Я хотел бы иметь такой же ползунок, который доступен в приложении камеры iphone 4.

Заранее спасибо за любые советы и примеры!


person kodex83    schedule 30.11.2010    source источник


Ответы (1)


Я новичок, и я пытался сделать масштабирование только с помощью AVFoundation framework, используя AVCaptureVideoPreviewLayer, и я тоже не могу заставить его работать. Я думаю, это потому, что этот слой имеет свой собственный AVCaptureSession, который управляет своим собственным выводом, и хотя я добавил его в качестве подслоя в UIScrollView, он по-прежнему работает сам по себе, и слой прокрутки не может влиять на слой предварительного просмотра.

Из сеанса 419 WWDC «Захват с камеры с помощью AVFoundation в iOS5» Брэд Форд сказал: «AVCaptureVideoPreviewLayer НЕ наследуется от AVCaptureOutput (как это делает AVCaptureVideoDataOutput). Он наследуется от CALayer, но может быть вставлен в основное дерево анимации (как и другие слои). В AVFoundation AVSession владеет своими выводами, но НЕ владеет своими слоями. Слои владеют сеансом. Поэтому, если вы хотите вставить слой в иерархию представлений, вы прикрепляете к нему сеанс и забываете об этом. Затем, когда дерево слоев избавится от себя, он также очистит сеанс».

Я видел Брэда Ларсона, использующего комбинацию Open GL ES и платформы AVFoundation, по адресу: http://www.sunsetlakesoftware.com/2010/10/22/gpu-accelerated-video-processing-mac-and.-ios использовать AVCaptureVideoPreviewLayer, где он может настроить необработанные данные с камеры, поэтому я предполагаю, что это место для начала. Проверьте его приложение ColorTrackingCamera. Он использует шейдеры, которые вам (и мне) не нужно масштабировать, но я думаю, что аналогичный механизм можно использовать для масштабирования.

О, я забыл упомянуть, что Брэд Ларсон НЕ прикрепляет AVCaptureInput к AVCaptureSession. Я вижу, что он также использует основной поток для своей очереди вместо того, чтобы создавать свою очередь в другом потоке. Его методы Open GL ES для drawFrame также являются способом рендеринга изображения, а сам сеанс захвата этого не делает. Итак, если вы понимаете больше или мои предположения неверны, пожалуйста, дайте мне знать.

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

Джефф В.

person Jeff W    schedule 06.10.2011