3

私の目的は、AVFoundationキャプチャされた画像を(オーバーレイビューを使用して)キャプチャして表示するために使用することです-プレビューレイヤーのものと同じである必要があります。

iPhone 4 インチの画面サイズでの作業は、キャプチャした画像のサイズを変更するだけなので問題ありません。ただし、iPhone 3.5 インチの画面サイズでの作業はより複雑で、サイズ変更とトリミングが必要です。

両方のカメラ位置 (前面と背面) で機能するコードがありますが、背面カメラで撮影した画像のサイズ変更/トリミングのコードにはパフォーマンスの問題があります。画像のサイズを変更するときのパフォーマンスの問題を、より大きな画像のコンテキストに絞り込みました。画像の「網膜」品質を維持するには、より大きな画像コンテキストが必要ですが、前面カメラは非常に貧弱で、キャプチャされた画像はとにかく「網膜」品質ではありません。

問題のコードは次のとおりです。

UIGraphicsBeginImageContext(CGSizeMake(width, height)) 

// where: width = 640, height = 1138
// image dimensions = 1080 x 1920 

image.drawInRect(CGRectMake(0, 0, width, height))
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

私は周りを検索しましたが、これを行う別のより効率的な方法を見つけることができません。このパフォーマンスの問題を克服するのを手伝ってくれる人はいますか? ありがとう

4

1 に答える 1

5

あなたの質問からは、最終的な入力と出力が何であるか、リアルタイムの要件が何であるかが完全には明らかではありません。私はあなたが何をしているのかについてのいくつかの仮定で、あなたが必要とする主要なポイントに触れようとします.

あなたの質問には明確ではありませんが、あなたがしなければならない決定があります。処理が遅れると、フレームがドロップしたり、品質が低下したり、入力が遅れたりしますか? これらはいずれも有効なアプローチですが、最終的にはいずれかを実行する必要があります。選択しない場合は、選択が行われます (通常は入力を遅らせますが、処理を行っている場所によっては、AVFoundation がフレームをドロップし始める場合があります)。

トリミングに関する特定の質問に対して、おそらく必要なツールはCGImageCreateWithImageInRect. これは、クロッピングの現在のソリューションよりもはるかに高速になることはほぼ確実です (時間内にサイズ変更できると仮定すると、それが可能であると提案されます)。

CGImageCreateWithImageInRect既存の画像を覗くだけなので、非常に高速になる可能性があるため、特殊なケースです。ただし、一般的には、絶対に必要以上に新しいものを作成しCGImageたり、それ以上作成したりすることは強く避ける必要があります。UIImageあなたが一般的にやりたいことは、基礎となる を操作することですCIImage。たとえば、 を で変換しCIImageimageByApplyingTransform、拡大縮小したりimageByCroppingToRectトリミングしたりできます。CIImage絶対に必要になるまで画像の作成を避けます。ドキュメントが言うように、これは実際には画像の「レシピ」です。さまざまなフィルターと調整を連鎖させて、それらすべてを 1 つの大きな GPU 転送で適用できます。データを GPU に移動してから CPU に戻すには、非常にコストがかかります。正確に 1 回実行する必要があります。また、遅れてフレームをドロップする必要がある場合は、CIImageレンダリングせずに をドロップできます。

カメラから YUV データにアクセスできる場合 ( を使用している場合CVPixelBuffer) はCIImage、RBGA 変換を回避できるため、さらに強力です。CIImageまた、カラー管理をオフにする機能もあります (サイズ変更とトリミングだけであれば問題ないかもしれませんが、色をまったく変更する場合には問題になります)。カラー マネージメントをオフにすると、大きな効果が得られます。リアルタイム作業の場合、CoreImage はEAGLContext、CPU との間でコピーを行ったり来たりする必要なく、GPU で動作し、GPU 上で動作することもできます。パフォーマンスがあなたを食い物にするなら、あなたはこれが欲しいです.

まず、Core Image Programming Guideを読み、何ができるかを理解してください。次に、 WWDC 2013の「Core Image Effects and Techniques」とWWDC 2014の「Advances in Core Image」をお勧めします。

于 2014-09-13T19:53:23.373 に答える