<< Back

AzDrawing形式ファイル (*.adw) ver 2 の仕様

AzDrawing ver 2.xx の ADW ファイルの仕様です。
ver 1 では各レイヤのイメージは全体がそのまま圧縮されていましたが、ver 2 では 64 x 64 のタイルイメージごとに圧縮されています。

※リトルエンディアン。

ADWヘッダ部(ver 1 と共通)
ヘッダ文字 7Byte "AZDWDAT"
バージョン数字 1Byte 1
プレビューイメージ部
「開く」ダイアログ時に表示される、プレビュー用のイメージです。
ver 1 では縮小されていない原寸大のイメージでしたが、ver 2 では 100 x 100 px に収まる程度に縮小されています。
2Byte イメージの幅サイズ(px)
高さ 2Byte イメージの高さサイズ(px)
圧縮サイズ 4Byte 下に続くイメージデータの圧縮後のバイト数。
0 でプレビューイメージなし。
イメージデータ [上のサイズ分] 32BIT、ボトムアップの DIB データを ZIP 圧縮したデータ。
DIB のイメージ部分のデータのみです。

X は左→右、Y は下→上の順で 32BIT の色データが並んでいる。
色は BYTE 順では BGRA、DWORD で読み込むと ARGB となる。
(内部で扱いやすくするために 32BIT にしています。アルファ値に関しては値の意味はないので無視してください)

ZIP 圧縮/展開については、zlib にイメージデータや圧縮されたデータをそのまま渡します。
全体の情報
データサイズ 2Byte 以下のデータ ("キャンバス幅"〜"レイヤ情報サイズ") のバイト数。
現在は 12 Byte。
キャンバス幅 2Byte キャンバスの幅サイズ(px)
キャンバス高さ 2Byte キャンバスの高さサイズ(px)
DPI 2Byte DPI値
レイヤ数 2Byte レイヤの数
カレントレイヤ番号 2Byte カレントレイヤのインデックス番号。
レイヤウィンドウから見て上から順に 0、1、2、3…となる。
レイヤ情報サイズ 2Byte レイヤデータの、タイルデータを除いた情報部分のバイト数。
("left"〜"アニメカウント"までのデータ)
現在は 79 Byte。
各レイヤデータ
以降、レイヤ数分のレイヤデータが順番に続く。
レイヤウィンドウから見て一番下のレイヤから順に格納されている。
left 4Byte レイヤイメージの左上の X 座標 (px)
top 4Byte レイヤイメージの左上の Y 座標
right 4Byte レイヤイメージの右下の X 座標 (+1 した値)
bottom 4Byte レイヤイメージの右下の Y 座標 (+1 した値)
タイル数 4Byte レイヤデータに含まれるタイルの数
レイヤ名 50Byte レイヤ名テキスト (UTF-16LE)。NULL 文字を含みます。
不透明度 1Byte レイヤの濃度。
0〜128 (0で透明、128で不透明)

※AzDrawing 上では 0〜100 となっていますが、内部では計算速度を上げるため 0〜128 の値となっています。
線の色 4Byte レイヤの線の色。
DWORD で読み込むと ARGB の順になる(ファイルから 1Byte ずつ読み込むと BGRA の順)
フラグ 1Byte [0 bit]
0 で非表示状態、1 で表示状態

[1 bit]
塗りつぶし参照のON/OFF

[2 bit]
レイヤマスク - 通常のマスク

[3 bit]
レイヤマスク - 下のレイヤをマスクに

[4 bit]
グループ化 - 通常のグループ化

[5 bit]
グループ化 - 下のレイヤをグループ化
フレームタイプ 1Byte アニメーションのフレームタイプ。

0 : 通常フレーム
1 : サブフレーム
2 : 共通フレーム
3 : 非表示
アニメカウント 2Byte アニメーションの表示フレーム数
※以下、「タイル数」で指定された数だけタイルのデータが並ぶ。↓各タイルデータ
タイル位置X 2Byte このタイルの相対 X 位置
タイル位置Y 2Byte このタイルの相対 Y 位置
圧縮サイズ 2Byte タイルのイメージデータを圧縮した後のバイト数。
4096 で無圧縮。
0 または 4097 以上の値の場合はデータが壊れている。
タイルの
イメージデータ
[上のサイズ分] タイルのイメージデータ。
無圧縮でない場合、データは zlib を用いて ZIP 圧縮されています。

8BIT の 64 x 64 のデータです。
X は 左→右、Y は 上→下 の順で並んでいます。
無圧縮なら 4096 Byte。

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


■ レイヤイメージの扱いについて

レイヤイメージは 64 x 64 px のタイル単位で、色がある部分のみイメージが確保されています。
色がない(透明な)部分はタイルイメージが確保されていません。

■ left、top、right、bottom について

各レイヤのイメージは可変サイズです。
色がある部分の範囲(px)が指定されています。

right - left が 0 、または bottom - top が 0 の場合は、レイヤの新規作成直後などで全体が透明で色が全くない状態です。
(その場合、通常は left、top、right、bottom がすべて 0 となっています)
この場合、イメージのデータはありません(タイル数が0)

例えば、(0、0、64、64) と指定されていたとすれば、(0、0)-(63、63) の範囲にイメージがあり、タイル数は 1 つだけ、となります。
right・bottom の値は実際の端の値を +1 した値となります。

■ タイル位置について

タイル位置は、left・top の px 位置を基準とした、64 x 64 px 単位での相対位置です。
タイル位置から実際の px 位置を計算する場合、

タイルの左上のpx位置 = タイル位置×64 + (left または top)

となります。

■ 合成後のイメージを作る

レイヤの各イメージは可変サイズなため、「移動」ツールでの移動などによって実際のキャンバスの範囲をはみだしている場合もあります。
各レイヤのイメージを読み込んでキャンバスの範囲でイメージを作りたい場合は、各タイルをキャンバスの範囲に収めながら合成していく必要があります。