[swfed]ming の png の扱い

SWF ファイル内の非可逆圧縮画像のデータは zlib で圧縮されている。
…で、PNG も zlib 圧縮なので、もしかしてうまい事やってないかなと、
ming のコードを覗いてみた。

% mkdir ming
% cd ming
% cvs -d:pserver:anonymous@ming.cvs.sourceforge.net:/cvsroot/ming login 
% cvs -z3 -d:pserver:anonymous@ming.cvs.sourceforge.net:/cvsroot/ming co -P .

ming が PNG を処理するファイルは、ming/util/png2dbl.c,dbl2png.c の2つ。

png2dbl.c の中身

struct pngdata readPNG(FILE *fp)
{
	<略>
  png_read_image(png_ptr, row_pointers);

普通に libpng 経由で zlib 圧縮/伸張してるっぽい。

学習した事

やはり、libpng を使って真面目に zlib 圧縮/伸張しよう。
swfed では replacePNGData の API を用意したけど、
これだと差し替える度に、zlib 処理が走るので、
先に PNG を Lossless (か、それに近い形式)に変換しておいて、
replaceLossless で入れ替えた方が実サービスにはいいかも。と思い始めた。

zlib 圧縮/伸張の処理は重たいので、毎回動くかすのは勿体無い。