Esto parece una tarea simple, sin embargo, me está volviendo loco. ¿Es posible convertir un UIView que contenga AVCaptureVideoPreviewLayer como una subcapa en una imagen para guardar? Quiero crear una superposición de realidad aumentada y tener un botón para guardar la imagen en el rollo de la cámara. Presionando el botón de encendido + tecla de inicio captura la captura de pantalla en el rollo de la cámara, lo que significa que toda mi lógica de captura está funcionando, Y la tarea es posible. Pero parece que no puedo hacer que funcione programáticamente.¿Es posible renderizar AVCaptureVideoPreviewLayer en un contexto de gráficos?
Estoy capturando una vista previa en vivo de la imagen de la cámara usando AVCaptureVideoPreviewLayer. Todos mis intentos de representar la imagen fallan:
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);
}
// ello convierte a todo, a excepción de la capa de vista previa, que está en blanco.
[appDelegate.window.layer renderInContext:UIGraphicsGetCurrentContext()];
He leído en alguna parte que esto puede ser debido a problemas de seguridad del iPhone. ¿Es esto cierto?
Sólo para ser claro: No quiero guardar la imagen para la cámara. Quiero guardar la capa de vista previa transparente superpuesta sobre otra imagen, creando transparencia. Sin embargo, por alguna razón no puedo hacerlo funcionar.
supongo que lo que el PO y yo estamos tratando, es conseguir un video en vivo usando avcapturevideopreviewlayer y están tratando de agregar una imagen escalada. Intento agregar una imagen escalada encima de la transmisión de video en vivo basada en la detección de rostros, y la captura de pantalla guardada es solo la de la superposición y no la de avcapturevideopreviewlayer. –
En la imagen de la GPU, estoy agregando filtros en las capas, así que estoy bastante seguro de que hay una manera de guardar solo la capa actual (hay un método en la imagen de la GPU para hacer UIImage del marco) Si quieres obtener lo que está en la pantalla: es una forma de hacer una captura de pantalla programáticamente. No puedo recordarlo ahora pero lo he visto en Stackoverflow) – Roma
Roma, muchas gracias por su respuesta. Aunque no utilicé GPUImage, lo usaré pronto. Gracias por publicarlo como una opción alternativa. –