<< Back

AzPainter形式ファイル (*.apd) の仕様

※リトルエンディアン

APDヘッダ部
ヘッダ文字 7Byte "AZPDATA"
バージョン数字 1Byte 0
全体のイメージ情報ヘッダ部
ヘッダデータサイズ 4Byte ヘッダデータのバイト数
(ヘッダのデータが増えた時の互換のために記録してある。現在は "10")
イメージの幅 2Byte イメージの幅(px)
イメージの高さ 2Byte イメージの高さ(px)
レイヤ数 2Byte ファイル中に存在するレイヤの数
レイヤ通算カウント 2Byte 今までいくつレイヤを作成したかという値。
レイヤを新規作成した場合のデフォルトレイヤ名("レイヤ"+番号)に使われる。
※レイヤ名でしか使われないので、適当な値でも構いません。
カレントレイヤ番号 2Byte カレントレイヤのインデックス番号。
レイヤウィンドウから見て一番上にあるレイヤを 0 として、0,1,2,3.... となる。
プレビューイメージ部
AzPainter で「開く」「保存」ダイアログ時に、APD ファイルを選択した場合に表示されるプレビューイメージのデータ。
APD には各レイヤのイメージは含まれているが、全体を合成した状態のイメージは格納されていないので (通常はプレビューする時くらいしか使わないため容量節約が目的)、内容確認のプレビュー時のために全体を合成したイメージを縮小したものを入れてある。

現在、AzPainter で APD を出力する時には 90x90 に収まるように縮小させたイメージをプレビューイメージとしているが (ダイアログのプレビュー欄がそのくらいの大きさなので)、プレビューイメージのサイズに制限はないので、別に縮小していなくても問題はない。
画像の幅 2Byte プレビューイメージの幅(px)
画像の高さ 2Byte プレビューイメージの高さ(px)
イメージデータサイズ 4Byte 下に続くイメージデータのバイト数。
0 でプレビューイメージなし。
イメージデータがある場合は [ 幅×高さ×4 ] がデータサイズとなる。
イメージデータ [上のサイズ分] 32BIT、ボトムアップの DIB データ (無圧縮)。
DIB のイメージ部分のデータのみです。

X は左→右、Y は下→上の順で 32BIT の色データが並んでいる。
色はバイト順では B-G-R-A、DWORD で読み込むと ARGB となる。
プレビュー時の読み込み処理を簡単にするため無圧縮にしてある。
レイヤデータ関連情報
レイヤヘッダのデータサイズ 4Byte 以下に各レイヤデータが続くが、各レイヤのヘッダ情報(レイヤ名〜フラグまでのデータ)のバイト数。
現在は "35"。
各レイヤデータ
以降、レイヤ数分のレイヤデータが順番に続く。
レイヤウィンドウから見て一番下のレイヤから順に格納されている。
レイヤ名 32Byte レイヤ名テキスト。NULL 文字を含みます。
合成モード 1Byte レイヤの合成モードの番号。

[0] 通常 [1] 乗算 [2] 加算 [3] 減算 [4] スクリーン [5] オーバーレイ [6] ソフトライト [7] ハードライト [8] 覆い焼き [9] 焼き込み [10] 焼き込みリニア [11] ビビットライト [12] リニアライト [13] ピンライト [14] 差の絶対値
(以降、AzPainter2のみ) [15] 比較(明) [16] 比較(暗)
不透明度 1Byte レイヤの不透明度。
0〜128 (0で透明、128で不透明)

※AzPainter 上では 0〜100 となっていますが、内部では計算速度を上げるため 0〜128 の値となっています。
フラグ 1Byte [0bit]
表示状態(0 で非表示、1 で表示)
[1〜2bit]
透明色保護 (0 でなし、1 で透明色保護ON、2 で不透明色保護ON)
[3bit]
アルファマスク(1 でON)
[4bit]
AzPainter2 のみ。
塗り潰し判定元(1 でON)

※AzPainter2 では、透明色保護とアルファマスクを合わせてレイヤマスクとしているので、アルファマスクがONの時は透明色保護(1〜2bit)のデータは無視します。
イメージデータサイズ 4Byte 圧縮後のイメージデータバイト数。
イメージデータ [上のサイズ分] 圧縮されたレイヤのイメージデータ。
データは zlib を用いて ZIP 圧縮されています。

展開後のデータは 32BIT・ボトムアップの DIB データです。
なお、展開後のデータサイズはイメージの [ 幅×高さ×4 ] で計算できます。
(※レイヤの画像サイズは全体のイメージサイズと同じです)

圧縮・展開する時はデータを丸ごと zlib に渡せば OK です。

サンプルプログラム

>> apdtobmp.cpp

APD ファイルから各レイヤイメージを取り出し、32BIT BMP に出力します。

※別途 zlib が必要です。あらかじめ zlib をコンパイルしておきライブラリをリンクしてください。