Flash Liteメモリ対策 ビットマップ編

Flash CS3で 作成したFlash Lite 1.1 の swf ファイルを
Adobe Device Central で開いて heap メモリ消費量を比較してみた。
デバイスプロファイルは手元に実機のある au W52K (MEDIA SKIN) 。
携帯 Flash ではファイルサイズよりもメモリオーバーの方がよりシビアだと思う(´・ω・`)

(1) 128 色 PNG 画像 (透過あり) vs 128 色 PNG 画像 (透過なし+マスク)
128 色に減色し、背景色を透過にした PNG 画像をそのまま配置したものと、
128 色に減色し、背景色を透過にしなかった PNG 画像にマスクをかけて
前者とほぼ同じに見えるようにしたものの比較。
時々後者の方法で納品を受けるものの、体感的な違いが少ないのでテスト。

128 色 PNG 画像(透過あり) … 143KB
128色PNG画像(透過あり)

128 色 PNG 画像(透過なし+マスク) … 152KB
128色PNG画像(透過なし+マスク)
…微増。
マスクの曲線数はぴったり 200なので、特に複雑というほどでもなく
手間からしてもそのまま背景透過の PNG 画像を配置した方が良さそうです。

ただし、どんな画像でもそうとは限らない。次に続く。

(2) (1) から更に、圧縮を JPG にして比較してみる
JPG 画像を配置すると重くなるのは体感的にわかるけど、実際どの程度なのか。
(1) のファイルの画像のビットマッププロパティで、圧縮に JPG を使用するよう指定した。

128色 PNG 画像 (透過あり) を配置して圧縮に JPG を使用、画質 80 … 245KB
256色PNG画像(透過あり)を配置して圧縮にJPGを使用、画質80
102KBも跳ね上がった。こええええ((((;゜Д゜)))
体感って数字で見るとこんなに違うのか!

128 色 PNG 画像 (透過なし+マスク) を配置して圧縮に JPG を使用、画質 80 … 191KB
256色PNG画像(透過なし+マスク)を配置して圧縮にJPGを使用、画質80
圧縮に JPG を使用するなら透過なしにマスクをした方が負担が軽い。

ここまでのビットマップ画像に関する結論:
ファイルサイズの制限にひっかからない限り PNG or GIF を利用した方が良い。
JPG を使わなければファイルサイズが厳しい場合のみ JPG を使用する。
圧縮が JPG で、透過させる必要がある場合はマスクを作って対応する。

(3)では、PNGの色数やJPGの圧縮率はメモリ消費量に影響するのか
(1) で使用した PNG 画像を減色したり、 (2) で使用した JPG 画像の圧縮率を変えることでメモリ使用量が変化するのかどうかテスト。

(1)で使用した「128 色 PNG 画像(透過あり) 」の画像を、16色まで減色 … 143KB→143KB
(1)で使用した「128 色 PNG 画像(透過あり) 」の画像を、16色まで減色
メモリ使用量に変化なし。

(2)で使用した「128色 PNG 画像 (透過あり) を配置して圧縮に JPG を使用、画質 80」の画像を、画質50に … 245KB → 242KB
(2)で使用した「128色 PNG 画像 (透過あり) を配置して圧縮に JPG を使用、画質 80」の画像を、画質50に
ちょっとだけ減りましたが、この差なら画質を犠牲にしてまで圧縮する必要は無いなあ。

ビットマップ画像の画質はファイルサイズとだけ相談すれば良いようです。