Alchemy PNG encoder

PNGSample

てことで、 zliblibpng を使って、 Alchemy で PNG クラスを作ってみた。サンプルの一番下に該当。

PNG フォーマットには圧縮効率を上げるフィルタという仕組みがあって、フィルタの仕組み自体は PNG の仕様書みながら実装できるけど、どのフィルタを使うのが最適なのかはアプリケーションに任されてるけど正直んなとこまで突っ込みたくないしってことで、 Alcehmy 使えばフィルタ選択もしつつ高速化もできるかと思ったけどそんなに甘くなかった。 結果は見ての通り。OSEEEEEEEEEEEEEEEEE!!

ただ、フィルタの自動選択の方はコンボボックスで PNG_ALL_FILTERS を選択してエンコードすると libpng が各スキャンラインに対して自動的に最適であろうフィルタを選択してくれてる気がする。 あと、 AS では引数もなにもなしで ByteArray.compress() の一行で済まされてしまう zlib アルゴリズムでの圧縮に対して、 Alchemy で zlib を使うと圧縮レベルを 0(無圧縮)~9(最大圧縮) で設定することができる。当然圧縮率上げると遅いけど。 ちなみに libpng のデフォルトのフィルタタイプは PNG_ALL_FILTERS で、圧縮レベルは 6 ぽい。

速度重視なら Optimized PNGEncoder with filters 使って、ファイルサイズをある程度考慮しないとだったら Alchemy の PNG クラス使うとかそんな感じかなー・・・なんにせよ選択肢増えたってことでよしとするか・・・


About this entry