4

私はすでにCALayerからこのソリューションCGImage(またはUIImage)を試しました

しかし、私は何も得ません。

質問が言うように、カメラのプレビュー レイヤーから UIImage を取得しようとしています。静止画像をキャプチャするか、outputsamplebuffer を使用できることはわかっていますが、セッション品質のビデオが写真に設定されているため、これら 2 つのアプローチのいずれかが遅く、大きな画像が得られます。

だから私がうまくいくと思ったのは、プレビューレイヤーから直接画像を取得することです。これは、必要なサイズが正確にあり、操作が既に行われているためです。UIImageとして取得できるように、このレイヤーをコンテキストに描画する方法がわかりません。

おそらく別の解決策は、OpenGL を使用してこのレイヤーをテクスチャとして直接取得することでしょうか?

どんな助けでも感謝します、ありがとう。

4

1 に答える 1

4

この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:17:27.863 に答える