0

CGContextDrawImageを使用していますが、パフォーマンスに満足していません。

これが私の状況です:

kCGBitmapByteOrder32BigとkCGImageAlphaPremultipliedLastを使用してCGBitmapContextから作成され、RGBAピクセルを含むCGImageがあります。サイズは64x64ピクセルです。

kCGBitmapByteOrder32BigとkCGImageAlphaPremultipliedLastで作成された別のCGBitmapContextがありますが、このビットマップコンテキストははるかに大きく、私の場合は1200x1600ピクセルです。

ユーザーが描いたパスに沿って画像にスタンプを付けようとしています(通常のブレンドモードでCGContextDrawImageを使用)。スタンプを押す前に毎回、CGContextClipToMaskを呼び出して、次に描画するときに、画像が特定のマスク(たとえば、円、星、三角形など、ユーザーが選択したもの)にクリップされるようにします。iPhone 4Sでユーザーインターフェイス全体が完全に応答しなくなるまで、1秒間に5〜10回以上スタンプを押すことができないようです。指を本当にゆっくりドラッグしない限り、レンダリングはひどく遅くなります。

スタンプの間隔を広げることはできますが、1〜2ピクセルよりもはるかに高い間隔を使用すると見栄えが悪くなるため、各スタンプの間隔を約1ピクセルに保ちたいと思います。

私はすでにアプリのプロファイルを作成しており、CPU時間の90%がCGContextDrawImage呼び出しからのAppleコードに費やされています。Quartz2Dのパフォーマンスに関するAppleのドキュメントもすべて読みました。

Core Graphics / Quartz2Dを使用してこれを高速化するために試すことができるものは他にありますか?可能であればOpenGLにドロップダウンしたくないのですが、他に選択肢がないかもしれません...

マスクを適用する行をコメントアウトすると、パフォーマンスはまともです。

ああ、会社の方針により、コードを投稿できません。申し訳ありません...

4

1 に答える 1

0

これは、同じコンテキストでマスクをスタックすることが原因でした。各マスク間の状態を保存/復元することにより、パフォーマンスが大幅に向上します。

于 2013-10-27T23:42:49.117 に答える