MediBang Paint Proでmdp拡張子で保存するときの、xmlのフォーマットを自力で解析する続きです。
何も描いていないキャンバスデータの保存データと、レイヤーを追加したデータで比較してみます。
takk@deb8:~/Desktop$ wc -c file-layer*.mdp 1195 file-layer1.mdp 1628 file-layer2.mdp 2061 file-layer3.mdp 4884 合計 takk@deb8:~/Desktop$ expr 2061 - 1628 433 takk@deb8:~/Desktop$ expr 1628 - 1195 433 takk@deb8:~/Desktop$
ファイル名のlayerの後の数字は、レイヤー数を表します。
ファイルサイズを比較すると、レイヤー1つにつき、433バイト増えているようです。
Vimを使ってバイナリ差分を眺めてみましょう。
takk@deb8:~/Desktop$ vim -O file-layer[12].mdp
Vimが起動したら、:windo :%!xxdで、各バイナリをの16進ダンプに変換します。
16進ダンプに変換後、:windo diffthisで、diffします。
上の画像では小さくで見えないので、左右の比較を上下に並べてクローズアップします。
上がレイヤー1つ、下がレイヤー2つのファイルデータです。
一行目から差分がありますね。
レイヤー1つのファイルでは、c202、レイヤー2つのファイルではeb03です。数字をみると、リトルエンディアンっぽいので、上下逆にして2c2と3eb、つまり10進数で706と1003です。1003-706=297。ファイル全体のサイズ差である433よりも小さい数字になっています。おそらく、各レイヤーのヘッダ分、もしくはデータ分を除いたサイズと思います。
ではstringsで、だいたいのヘッダ部分のサイズ差を求めます。
takk@deb8:~/Desktop$ strings file-layer1.mdp | wc -c 735 takk@deb8:~/Desktop$ strings file-layer2.mdp | wc -c 1036 takk@deb8:~/Desktop$ expr 1036 - 735 301 takk@deb8:~/Desktop$
さきほどの297という数字に近いので、一行目の数字はレイヤー部分のヘッダで確定かと思います。
おそらく、こんな構造になっているに違いありません。
続く
コメント