2013-03-29 123 views
7

我使用AVFoundation框架來顯示來自相機的視頻。AVFoundation相機變焦

我如何使用它的代碼是平常:

session = [[AVCaptureSession alloc] init] ; 
... 
captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; 
... 
[cameraView.layer addSublayer:captureVideoPreviewLayer]; 
... 

所以我想縮放功能添加到相機。

我發現2個解決方案如何實現縮放。

首先:是使用CGAffineTransform

cameraView.transform = CGAffineTransformMakeScale(x,y);

:是把在滾動視圖cameraView,設置最大值和最小值滾動並將此視圖縮放視圖。

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return cameraView; 
} 

什麼是縮放更好的性能和質量的最佳方式是什麼?還有其他解決方案可以進行縮放嗎?也許我錯過了一些AVFoundation縮放方法。

謝謝。

+0

我希望得到一個真正的專家的意見,但由於沒有人插話,我以爲我會分享我的經驗。由於沒有真正的機械變焦,所以它只是玩高寬比。我發現在使用CGAffineTransform工作得很好的圖層時,尤其是在創建會話時設置AVCaptureVideoPreviewLayer.videoGravity設置時。將變換與滑塊或捏合手勢鏈接起來非常簡單。如果將幀設置爲視圖邊界,該變換甚至可以處理奇數幀大小。希望有所幫助。 – CocoaEv

+0

謝謝你的回答,我想實現使用變換的縮放,但我花了很少的時間使它使用scrollview縮放,效果很好:)我想問這個問題,也許AV框架有縮放的東西。 –

+0

滾動視圖的好提示。我也要檢查一下。 – CocoaEv

回答

6

那麼實際上有一個GCFloatsetVideoScaleandCropFactor

你可以找到文檔here

我不確定這是否僅用於靜止圖像輸出,但我一直在努力,如果將其設置爲手勢或滑塊並讓它控制浮動,它會表現良好。

你可以找到它的演示here

好東西。我試圖循環它,所以我可以創建一個縮放條形碼掃描儀。儘管哈哈,即使做什麼也很粗魯。

+2

videoScaleAndCropFactor不適用於視頻。 videoMaxScaleAndCropFactor設置爲1.0,如果更改videoScaleAndCropFactor,則會引發異常。 –

+0

@Nathan Kellert我沒有得到AVCaptureSession屬性VideoScaleandCropFactor ,,你可以解釋如何實現縮放視頻(不縮放視頻視圖)...? –

+0

視頻比例和裁剪因子是實際視頻本身的縮放比例。不像以前開發者使用的方法這是1)捕捉視頻2)縮放3)基於新的縮放比例(這會導致像素化)重新捕捉視頻。新的ios 7的東西實際上首先放大視頻,然後以全分辨率拍攝。您基本上想要設置視圖縮放,以便觀看者可以在屏幕上看到視頻實際捕獲的相同內容。否則,視頻可能會捕捉放大的視頻,但屏幕看起來完全正常。真的演示應用程序做了很多,以幫助顯示它的工作原理。 –