4

低AVCaptureSessionPreset我几乎下面这一个同样的问题:的iOS拍摄高分辨率的照片,而使用视频输出

Switching AVCaptureSession preset when capturing a photo

然而,问题是,(个体经营)答案不帮助我一点。我想知道是否有人知道如何做到这一点。

我捕获的视频帧,所以我可以处理它们,并与他们做些事情。为此,我使用的是AVCaptureSessionPrese640x480,因为我需要获得所需的所有帧速率,同时获得适合计算的体面帧。现在,当用户想要拍摄照片时,我希望他能够以最高分辨率拍摄照片。为此,我不赞成:

[captureSession beginConfiguration]; 
captureSession.sessionPreset = <some_preset> 
[captureSession commitConfiguration]; 

我试过这个,我在某些情况下得到一个错误;但由于某种原因屏幕上仍然存在一定的滞后,我不再相信这一点。

当以非常低的分辨率(例如640x480)捕获视频输出时,是否有确定的方式从相机获取高分辨率图像?

+0

您可能想尝试将一些工作放到单独的线程中。 commitConfiguration可能会由于设备同步而暂停线程,如果可能的话将其放入单独的线程(可能工作或不工作)。无论如何,在调用此方法后,您应该期望下一帧仍可能处于低分辨率状态,因此您需要检查每帧的样​​本。一旦你收到一个高分辨率的样本,你应该再次使用一个单独的线程来生成图像或你正在做的任何事情,也可能锁定“拍照”按钮/触发器。 –

+0

感谢您的建议,但这将是可怕的应用程序。配置也重新聚焦,所以我永远不会让用户专注和点击。我想知道是否有一种标准的做事方式,因为很多人可能都需要这样做。 – p0lAris

+0

我相信在这一点上你已经走到了尽头(尽管我可能是错的)。也许如果可能的话,您可以简单地捕获高分辨率采样,然后在将它们提供给视频输入之前自行降采样。为了获得一些性能,你可以尝试把它放到GPU上,但不能保证它会获得任何性能。我希望你找到一个好的解决方案,并在这里发布。 –

回答

2

对于iPhone6和iPhone6 +,你可以使用新的API [AVCaptureStillImageOutput setHighResolutionStillImageOutputEnabled:YES] 当该标志已打开(它默认是关闭的),您在使用低分辨率拍摄会话可以捕捉高分辨率的静态图像。

+0

不幸的是,它不适用于iPad 3上的iOS 8.1。 –

0

您可以添加AVCapturePhotoOutputAVCaptureSession对象并设置其highResolutionCaptureEnabled属性为YES。在捕获期间,您可以使用AVCapturePhotoOutput的capturePhotoWithSettings消息通过传递它捕获图像AVCapturePhotoSettings object和AVCapturePhotoCaptureDelegate。通过使用AVCapturePhotoSettings对象,您可以进一步修改捕获属性,如flashMode,autoStillImageStabilizationEnabledhighResolutionPhotoEnabled。用法如AVCamManual example所示。

相关问题