Захват изображения предварительного просмотра с помощью AVCaptureStillImageOutput

Прежде чем члены stackoverflow ответят: «Вы не должны. Это нарушение конфиденциальности», позвольте мне возразить, почему в этом есть законная необходимость.

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

Единственный разумный ответ, который я видел, это захват буфера AVCaptureVideoDataOutput, что нормально, но теперь я не могу позволить пользователю снимать видео/фото с помощью kCVPixelFormatType_420YpCbCr8BiPlanarFullRange, что является кошмаром при попытке получить CGImage с помощью CGBitmapContextCreate См. Как преобразовать буфер kCVPixelFormatType_420YpCbCr8BiPlanarFullRange в UIImage в iOS

При фотосъемке есть ли какие-либо серьезные соображения по поводу качества при использовании AVCaptureVideoDataOutput вместо AVCaptureStillImageOutput? Поскольку пользователь будет снимать как видео, так и фотографии (а не только стоп-кадры для предварительного просмотра). старое оборудование?


person Ryan Romanchuk    schedule 23.01.2014    source источник


Ответы (1)


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

UIGraphicsBeginImageContext(previewView.frame.size);
[previewLayer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Где previewView.layer — это previewLayer — это AVCaptureVideoPreviewLayer, добавленный в previewView. «изображение» рендерится из этого слоя и может использоваться для вашей анимации.

person Donovan    schedule 21.12.2014