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所示。

相關問題