这似乎是一个简单的任务,但它使我疯狂。 是否可以将包含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的安全问题。这是真的?
只是要清楚:我不想为相机保存图像。我想将透明预览图层保存在另一个图像上,从而创建透明度。但由于某种原因,我无法完成工作。
我猜的OP和我正在努力,是让使用avcapturevideopreviewlayer实况视频,并尝试添加一个缩放后的图像。我正在尝试在基于人脸检测的实时视频供稿顶部添加缩放图像,并且保存的屏幕截图仅为叠加而不是avcapturevideopreviewlayer。 –
在GPU图像中,往往会在图层上添加滤镜,所以我非常确定只能保存当前图层(GPU图像中有方法可以从图像中制作UIImage)。如果您想要获取显示内容 - 那里是以编程方式制作屏幕截图的方式。现在我不记得了,但是我在堆栈中看到它) – Roma
罗马人,非常感谢你的回答。尽管我没有使用GPUImage,但我一定会尽快使用它。感谢您发布它作为替代选项。 –