フィルターおよびビットマップの動的アンロード

Pixel Bender で処理したフィルターも含め、フィルターは使用しないようにしてください。

フィルター(Pixel Bender を使用してモバイルデバイスで処理したフィルターを含む)などの効果の使用は最小限に抑えてください。表示オブジェクトにフィルターが適用されている場合、メモリ内にビットマップが 2 つ作成されます。これらのビットマップは、どちらも表示オブジェクトと同じサイズです。1 番目のビットマップは表示オブジェクトのラスタライズバージョンとして作成されます。このラスタライズバージョンを使用して 2 番目のビットマップを生成し、それにフィルターが適用されます。

フルサイズのグラフィックを表示
フィルター適用時にメモリ内に作成された 2 つのビットマップ

フィルターのいずれかのプロパティを変更すると、両方のビットマップがメモリ内で更新され、結果のビットマップが作成されます。このプロセスは CPU 処理を伴い、2 つのビットマップがメモリを大量に使用する可能性があります。

Flash Player 10.1 および AIR 2.5 では、すべてのプラットフォームで新しいフィルター動作が導入されています。フィルターが 30 秒以内に変更されない、または非表示かオフスクリーンの場合、フィルターが適用されていない方のビットマップが使用しているメモリは解放されます。

この機能により、すべてのプラットフォームで、フィルターが使用するメモリが半減します。例えば、ぼかしフィルターが適用されたテキストオブジェクトについて考えてみましょう。この場合、テキストを簡単な装飾に使用し、変更は行いません。30 秒後、メモリ内の、フィルターが適用されていないビットマップが解放されます。テキストを 30 秒間非表示にするか、オフスクリーンにした場合も、同じ結果が示されます。フィルターのいずれかのプロパティが変更された場合は、メモリ内の、フィルターが適用されていないビットマップが再作成されます。この機能は、ビットマップの動的アンロードと呼ばれています。これらの最適化を使用しても、フィルターの扱いには注意してください。フィルターの変更時に、膨大な CPU または GPU 処理が必要とされることに変わりありません。

ベストプラクティスとして、可能な場合は Adobe® Photoshop® などのオーサリングツールで作成されたビットマップを使用して、フィルターをエミュレートします。ActionScript で実行時に作成された動的ビットマップを使用することは避けます。外部的に作成されたビットマップを使用すると、特にフィルタープロパティが長時間変更されない場合に、ランタイムでは CPU または GPU のロードを低減できます。可能な場合は、オーサリングツールでビットマップに必要な効果を作成します。これにより、ランタイムで何も処理を実行せずにビットマップを表示できるようになり、格段に高速化されます。