2013-03-29 33 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

私は本当の専門家からのコメントを期待していましたが、だれも私が私の経験を分かち合うと思っていたからだと思います。実際の機械的なズームはないので、アスペクト比で再生しているだけです。セッションを作成するときに特にAVCaptureVideoPreviewLayer.videoGravity設定を設定した場合、CGAffineTransformを使用してレイヤーを操作すると非常にうまく動作することがわかりました。スライダまたはピンチジェスチャで変換をリンクするのはかなり簡単です。フレームをビュー境界に設定した場合、トランスフォームは奇数フレームサイズを処理します。助けてくれることを望む。 – CocoaEv

+0

何か答えをありがとう、私は変換を使用してズームを実装したいと思ったが、私はスクロールビューのズームを使用してそれを作るために本当に少し時間がかかった:)私はおそらくAVフレームワークはズームのための何かを持って質問を考えた。 –

+0

スクロール表示の良いヒント私もそれをチェックするつもりです。 – CocoaEv

答えて

6

実際には、と呼ばれるGCFloatがあります。

hereというマニュアルがあります。

これは単に静止画出力のためのものかどうかは分かりませんが、私はそれに取り組んできました。ジェスチャーまたはスライダーに設定してそのコントロールをフロートにするとうまくいきます。

デモはhereです。

良いもの。私はズームしてバーコードスキャナを作成することができますので、私はそれをループしようとしています。私がやっていることは、やはり荒いです。

+2

videoScaleAndCropFactorは動画では機能しません。 videoMaxScaleAndCropFactorは1.0に設定され、videoScaleAndCropFactorを変更すると例外がスローされます。 –

+0

@Nathan Kellert私はAVCaptureSessionプロパティVideoScaleandCropFactorを得ていませんでしたが、ビデオを拡大する方法を説明することはできますか? –

+0

ビデオスケールとクロップファクタは、実際のビデオ自体のズームです。以前の方法とは異なり、開発者が使用しました。 1)ビデオをキャプチャする2)それを拡大する3)新しいスケールに基づいてビデオを再キャプチャする(ピクセル化を引き起こす)。新しいios 7のものは、実際にビデオを実際にズームしてからフル解像度でキャプチャします。基本的にビューズームを設定して、ビデオが実際にキャプチャしているものと同じものを画面上で見ることができるようにします。そうしないと、ビデオはズームされたビデオをキャプチャすることができますが、画面は完全に正常に見えます。デモアプリケーションは、実際にどのように動作するかを示すのに役立ちます。 –

関連する問題