PNG クラス
- BitmapData? から PNG フォーマットされた ByteArray? へのエンコード
- PNG フォーマットされた ByteArray? をちょっとだけデコードして主要なメタデータ等を XML に変換(表示用のデコードは Loader.loadBytes() で)
特徴
- Alchemy の機能で非同期処理が可能
- libpng の機能でフィルタ処理が可能(バイト配列の冗長化で deflate 圧縮の効果を高める → ファイルサイズが小さくなる)
- zlib の機能で圧縮率の設定が可能(0 高速無圧縮 ~ 9 低速高圧縮)
- 非同期処理中に進捗状況を知らせるイベントを発行
ダウンロード
- as3proj
- http://www.libspark.org/svn/as3/PNG 以下にあります。
ソース
- as
- c(swc のソース)
クラスパス
- lib/as 以下の jp ディレクトリ
- lib/swc 以下の png.swc
同期エンコード
new します。
encodeSync() メソッドで BitmapData? を渡します。
エンコードされた ByteArray? に data プロパティでアクセスします。
private function _init():void
{
var png:PNG = new PNG();
png.encodeSync(bitmapData);
trace(png.data.length);
trace(png.toXML());
}
非同期エンコード
new します。
encodeAsync() メソッドで BitmapData? を渡します。
完了後、エンコードされた ByteArray? に data プロパティでアクセスします。
private function _init():void
{
var png:PNG = new PNG();
png.addEventListener(Event.OPEN, _onOpen);
png.addEventListener(ProgressEvent.PROGRESS, _onProgress);
png.addEventListener(Event.COMPLETE, _onComplete);
png.encodeAsync(bitmapData);
}
private function _onOpen(e:Event):void
{
trace(e);
}
private function _onProgress(e:ProgressEvent):void
{
trace(e.bytesLoaded, e.bytesTotal);
}
private function _onComplete(e:Event):void
{
var png:PNG = e.currentTarget as PNG;
trace(png.data.length);
trace(png.toXML());
}
png.swc について
png.gg から png.swc を再度コンパイルする場合、 /src/alchemy/fileformats/png に zlib と libpng を入れてそれぞれ make しておく必要があります。
- zlib
$ alc-on $ ./configure $ make $ alc-off
- libpng
$ alc-on $ make -f scripts/makefile.gcc $ alc-off
- png.gg から png.swc をコンパイル
$ alc-on $ sh build.sh $ alc-off

