ダイレクトミップマッピング

必要に応じて、大きい画像を縮小するためにはミップマッピングを使用します。

すべてのプラットフォームで使用可能な Flash Player 10.1 および AIR 2.5 の新機能の 1 つに、ミップマッピングに関する機能があります。Flash Player 9 および AIR 1.0 で導入されたミップマッピング機能によって、縮小されたビットマップの画質とパフォーマンスが向上しました。

注意: ミップマッピング機能が適用されるのは、動的にロードされた画像または埋め込みビットマップのみです。フィルターが適用された表示オブジェクトまたはキャッシュされた表示オブジェクトは対象外です。ミップマッピングは、ビットマップの幅と高さが偶数の場合にのみ処理できます。幅または高さが奇数になると、ミップマッピングは終了します。例えば、250 x 250 のイメージは 125 x 125 にミップマップできますが、それ以上は処理できません。この場合は、1 つ以上の寸法が奇数です。ビットマップの寸法が 2 のべき乗(例えば、256 x 256、512 x 512、1,024 x 1,024 など)の場合に、最善の結果を得ることができます。

例えば、1,024 x 1,024 のイメージがロードされているとします。開発者はこのイメージを縮小して、ギャラリー用のサムネイルを作成しようとしています。ミップマッピング機能では、ダウンサンプリングしたビットマップの中間バージョンをテクスチャとして使用することにより、縮小されたイメージを適切にレンダリングします。以前のバージョンのランタイムでは、縮小されたビットマップの中間バージョンがメモリ内に作成されていました。1,024 x 1,024 のイメージをロードして 64 x 64 で表示する場合、以前のバージョンのランタイムでは、すべてのビットマップについて、2 分の 1 に縮小したものを作成していました。例えば、この場合は、512 x 512、256 x 256、128 x 128、64 x 64 の各ビットマップが作成されます。

Flash Player 10.1 および AIR 2.5 では、元のソースから目的のサイズに直接ミップマップする機能をサポートするようになりました。上述の例では、4 MB(1,024 x 1,024)の元のビットマップと、16 KB(64 x 64)のミップマップされたビットマップのみが作成されます。

また、ミップマッピングのロジックは、ビットマップの動的アンロード機能とも連携します。64 x 64 のビットマップしか使用していない場合は、4 MB の元のビットマップはメモリから解放されます。ミップマップの再作成が必要な場合は、元のビットマップが再ロードされます。また、ミップマップされたビットマップについて、様々なサイズが必要な場合は、ビットマップのミップマップチェーンを使用してビットマップを作成します。例えば、8 分の 1 のビットマップを作成する必要がある場合、まず 4 分の 1、2 分の 1、1 分の 1 のビットマップを調べて、メモリにロードするビットマップを選定します。他のサイズが見つからない場合は、リソースから元のビットマップ(1 分の 1)をロードして使用します。

JPEG 解凍は独自の形式内でミップマッピングを実行できます。このダイレクトミップマッピングを使用すると、解凍済みの完全なイメージをロードすることなく、サイズの大きいビットマップをミップマップ形式に直接解凍できます。これにより、ミップマップの生成が大幅に高速化し、サイズの大きいビットマップに使用されていたメモリは、割り当てられずに解放されます。JPEG イメージの画質は、一般的なミップマッピング手法の画質と比べても遜色ありません。

注意: ミップマッピングは慎重に使用します。これによって、縮小したビットマップの画質は向上しますが、帯域幅、メモリ、速度に影響があります。場合によっては、外部ツールからビットマップのあらかじめ縮小されたバージョンを使用し、それをアプリケーションに読み込むオプションが有効です。縮小することだけが目的の場合は、大きいビットマップで作業を開始しないでください。