1

UIImages と CGImages の描画、CIFilters などの使用について学習しています。私の知識をテストするために、ポーション スプライトの色をプログラムで変更し、画面に表示するスライダーを備えた小さなテスト アプリを作成しました (CIHueBlendMode CIFilter を使用)。終了後、比較的長いコードをクリーンアップしたいと思い、フィルターの出力された CIImage から CGImage に移動してから UIImage に移動する代わりに、UIImage の imageWithCIImage: メソッドを使用して CIImage から UIImage に直接移動できることに気付きました。

しかし、drawInRect: を使用して結果の UIImage を描画しようとすると、何も描画されませんでした。もちろん、CGImage ステージを通過すると、これが修正されます。これについての私の理解は、CIImage から UIImage を作成すると、UIImage で NULL CGImage プロパティが発生し、 drawInRect: で使用されるということです。これは正しいです?もしそうなら、CGImage に続いて UIImage を表示するよりも、CIImage を表示するためのより良い方法はありますか? CIImage で作成した CGImage を描画することもできますが、それでは画像が反転してしまい、別の問題が生じます。現在、反転を処理するために、最初に UIImage で描画したものをラップします。別のより効率的な方法はありますか?

長すぎる; 読んでいない: CIImage を CGImage に変換してから UIImage に変換して描画する以外に、CIImage を描画するより良い方法はありますか? CGImages を描画するときに反転を処理する最良の方法は何ですか?

私の質問のいくつかに答えることができる人に感謝します。:)

4

1 に答える 1

1

CIImage とは何かについて調査した結果、CIImage から CGImage を作成するステップをスキップすることはできないことに気付きました。関係なく CIImage を処理します。Apple のドキュメント に記載されているように、CIImage は実際には画像ではなく、CGImageに変換されるときに処理されます。プロジェクトで Time Profiler を使用すると、drawRect: メソッドでの時間の 99% が createCGImage: に費やされ、CIFilters を使用しないのもそのためです。

Core Graphics と iPhone の間の座標系の変更に対処する最も効率的な方法については、UIImage インスタンスでオブジェクトをラップするのが最も簡単な方法のようです (最善かどうかはわかりません)。シンプルで、比較的効率的です。もう 1 つのオプションは、グラフィック コンテキストを変換することです。


3 日以内に自分の回答よりも良い回答が得られない場合は、承認済みとしてマークします。

于 2012-09-08T04:33:55.793 に答える