BMPファイルに取り出す方法

 [戻る]


Windows EXE版の場合

 コマンドラインから、"pxmk2bmp ファイル名" と実行することで、ファイル内の各ページが、pxmk_xxx.bmp(xxxはページ番号) という名前のBMPファイルに書き出されます。
 ファイル名には ".bdb" まで必要で、"picl16DB.pdb"(初期値) の場合だけファイル名の省略が可能です。
 ここで注意が必要なのが、書き出されるBMPのファイル名が必ず毎回 "pxmk_001.bmp" からの連番ファイルであるということです。これはつまり同じディレクトリ内でBMP抽出を行うと前回抽出したBMPファイルが上書きされてしまうことを意味します。上書きされたくないファイルは名前を変更するか他ディレクトリに逃がすかしてください。

 取り出されたBMPをPCで見ると、どえらく色が違うと思いますが、べつに pxmk2bmp.exe のバグとかじゃなくてこういうもんみたいです。Palmwareの開発環境にPC上で動くエミュレータがあるのですが、これも「同じように違う」ので。
あきらめてPC上で色補正しましょう。

 参考までにpxmk2bmp.exeのソースを公開しておきます。何の変哲もない C のコマンドラインプログラムだし、データの方も圧縮とかしていないので、わかる方が見ればすぐわかると思います。
ポイントは、1枚の絵が2レコードに分かれて入っていることと、1ピクセル=16ビットで上位ビットからRGBが5,6,5ビットになっているところです。ぜひとも各環境でより使いやすいツールを作ってください

pxmk2bmp.c

Perlスクリプト版の場合

 以下は、フナイアキラ様作成のPerlスクリプト版BMP抽出ツールに関する説明です。

Macintosh版

 準備: 本スクリプトの動作には MacPerl が必要です。

 使用法: pxmk2bmp.plと同じフォルダ内に picl16DB.pdb を置き、pxmk2bmp.pl を実行してください。Mac版は、picl16DB.pdb を直接 drag&drop しても起動できます。

Unix版/Windows版

 準備: 本スクリプトの動作には Perl5 が必要です。

 使用法: pxmk2bmp.plと同じフォルダ(ディレクトリ)内に picl16DB.pdb を置き、pxmk2bmp.pl 「perl pxmk2bmp.pl」のようにスクリプトを実行してください。
 また、「perl pxmk2bmp.pl /path/to/picl16DB.pdb」のように、引数からデータファイルを指定することができます。この場合、データファイル名はpicl16DB.pdbでなくても良いので、好きな名前でDBを保存しておいたりできます。


付記:調べてみたこと

 PalmOSの16ビットカラーについて調べていたら、ちょっとヤなことが判明しました。
16ビットモードで1ピクセルが16ビットで構成されていて、上位ビットから5,6,5ビットに分けそれぞれがR,G,Bに対応しているのはわかってたのですが、R,G,B各8ビットの値を持つBMPに変換するにあたってその5ビットなり6ビットが0〜255の値にどう対応しているのかという話です。
 実は前のバージョンまではなんとなく均等にしていたのですが、いろいろ調べてみたところ、

こんな感じのようです(グラフは5ビットの場合)。正直、こんなんでいいんかいって感じです。で今回のWindows-EXE版はテーブルを変更してます。が、実際にBMP抽出して見比べてもほとんど変化なしでした。ので、Perlスクリプト版はそのままです。ぜんぜん問題ありません。どうしても気になる方はEXE版のソースを参考に各自テーブルを差し替えてみてください。本当に変化なしです

 [戻る]


mailto: wernyv@yk.rim.or.jp