4

UIViewをブリットする必要があるサブクラスがありUIImageます。使用する API のシリーズに応じて、この猫の皮を剥ぐ方法がいくつかあります。それはですかUIImage? あるいは、C ベースの CoreGraphics ルーチンか、それとも何か他のものでしょうか? ソース画像のデータ形式を変更することで、ブリッティングが大幅に高速化されるのであれば、何の心配もありません。drawAtPointdrawRect

私の状況を説明すると、私のアプリには ~10 から ~200 の小さなUIViews (64x64) があり、そのサブセットはユーザーの操作に基づいて再描画する必要があります。私の現在の実装は、サブクラスのルーチンdrawAtPoint内への呼び出しです。この種のシナリオを処理するためのより良い方法を考えることができれば、私はすべて耳 (まあ、目) です。UIViewdrawRect

4

4 に答える 4

3

OpenGL ビューを使用するのが最も速いかもしれません。画像のエージ キャッシュを保持し (または、特定の画像をいつキャッシュから削除できるかを判断するためのより良い方法を知っている場合は、ぜひそれを使用してください)、アプリがアイドル状態のときにできるだけ多くの画像をプリロードします。Objective-C の呼び出しがほとんどなく、非常に高速である必要があります (単に-draw)

于 2009-09-09T01:27:10.877 に答える
2

まったく「ブリット」ではありませんが、問題の要件(さまざまな状態の変化を伴う多くの小さな画像)を考えると、さまざまな状態を保持して、独自の個別のUIImageViewインスタンスで再描画することができ、適切なインスタンスを表示/非表示にしました状態変化。

于 2009-09-24T23:06:58.283 に答える
1

あなたが見つけようとしている最速のブリット実装は私のAVAnimatorライブラリにあります。これにはCoreGraphicsバッファ用のブリットのARMasm実装が含まれています。ソースを見てください。これを利用する方法は、単一のグラフィックコンテキスト、画面全体のサイズを作成し、特定の画像の変更をこの単一のグラフィックコンテキストに分割し、そこからUIImageを作成して、の画像として設定することです。 UIImageView。これには、更新ごとに1つのGPUアップロードが含まれるため、バッファーにレンダリングする画像の数には依存しません。しかし、あなたはおそらくその低レベルに行く必要はないでしょう。最初に各64x64イメージをCALayerにしてから、レイヤー64x64の正確なサイズであるイメージのコンテンツで各レイヤーを更新する必要があります。唯一注意が必要なのは、元の画像がPNGまたはJPEGファイルからのものである場合は、それぞれを解凍することです。これを行うには、別のピクセルバッファーを作成し、元の画像を新しいピクセルバッファーにレンダリングします。これにより、すべてのPNGまたはJPEGの解凍が行われます。CALayerの内容の設定を開始する前に。

于 2011-10-16T06:52:34.050 に答える
1

CALayer は軽量で高速なので、試してみたいと思います。

ティエリー

于 2009-09-09T13:24:35.430 に答える