Можно ли визуализировать AVCaptureVideoPreviewLayer в графическом контексте?

Это кажется простой задачей, но сводит меня с ума. Можно ли преобразовать UIView, содержащий AVCaptureVideoPreviewLayer в качестве подслоя, в изображение, которое нужно сохранить? Я хочу создать наложение дополненной реальности и иметь кнопку для сохранения изображения в фотопленке. Удерживая кнопку питания + клавишу «Домой», снимите снимок экрана с фотопленки, что означает, что вся моя логика захвата работает, И задача возможна. Но я не могу заставить его работать программно.

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

  previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession];
//start the session, etc...


//this saves a white screen
- (IBAction)saveOverlay:(id)sender {
    NSLog(@"saveOverlay");

    UIGraphicsBeginImageContext(appDelegate.window.bounds.size);
        UIGraphicsBeginImageContext(scrollView.frame.size);

    [previewLayer.presentationLayer renderInContext:UIGraphicsGetCurrentContext()];


//    [appDelegate.window.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    UIImageWriteToSavedPhotosAlbum(screenshot, self, 
                                   @selector(image:didFinishSavingWithError:contextInfo:), nil);
}

// это отображает все, ЗА ИСКЛЮЧЕНИЕМ слоя предварительного просмотра, который пуст.

[appDelegate.window.layer renderInContext:UIGraphicsGetCurrentContext()];

Я где-то читал, что это может быть связано с проблемами безопасности iPhone. Это правда?

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

19
задан Alex Stone 26 January 2012 в 00:19
поделиться