2

私はiOS7のビデオ録画アプリケーションを開発しています。このアプリケーションのカメラ画面では、iOS7 コントロール センターに表示されているものと同様のぼかした背景を表示する必要があります。ビデオ プレビューが表示されている間、ぼやけたコントロール センターを表示する必要があります。WWDC ビデオ 226 で提案されているように、以下のコードを使用してカメラ プレビュー スナップショットを取得し、ぼかしを適用して、このぼかした画像をビューに設定しました。

UIGraphicsBeginImageContextWithOptions(_camerapreview.frame.size, NULL, 0);

[_camerapreview drawViewHierarchyInRect:rect];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

lightImage = [newImage applyLightEffect]

ここで _camerapreview は、AVCaptureVideoPreviewLayer を含む UIView です。コンテキストから取得した *newImage がなぜか黒くなっています。

ただし、[_camerapreview snapshotView] を使用すると、previewlayer コンテンツを含む UIview が返されます。しかし、UIview にぼかしを適用する方法はありません。

カメラ プレビュー レイヤーからぼやけた画像を取得するにはどうすればよいですか?

4

2 に答える 2

1

このTechnical Q&Aから Apple を引用します。

A: iOS 7 以降、UIView クラスはメソッド -drawViewHierarchyInRect:afterScreenUpdates: を提供します。これにより、完全なビュー階層のスナップショットを画面上に表示されるようにビットマップ コンテキストにレンダリングできます。iOS 6 以前では、ビューの描画コンテンツをキャプチャする方法は、基になる描画手法によって異なります。この新しいメソッド -drawViewHierarchyInRect:afterScreenUpdates: を使用すると、ビューが含まれる描画手法 (UIKit、Quartz、OpenGL ES、SpriteKit、AV Foundation など) に関係なく、レシーバー ビューとそのサブビューのコンテンツを画像にキャプチャできます。レンダリングされます

AVFoundationに関する私の経験では、プレビューレイヤーをホストするビューでそのメソッドを使用すると、プレビューレイヤーの画像なしでビューのコンテンツのみを取得します。を使用する -snapshotViewAfterScreenUpdates:と、特別なレイヤーをホストする UIView が返されます。そのビューから画像を作成しようとすると、何も表示されません。
私が知っている唯一の解決策はAVCaptureVideoDataOutputAVCaptureStillImageOutputです。それぞれに独自の制限があります。前者は取得と同時に動作できずAVCaptureMovieFileOutput、後者はシャッター ノイズを発生させます。

于 2014-03-06T09:16:22.343 に答える