雑記帳

ここの更新は更新記録のページには記載していないことが多々あります。よろしく。

各見出し部分に各記事へのリンクを表示するようにしましたので必要な方はご利用ください。

GIMP用画像ローダー作成計画 その5

この記事へのリンク

MAGローダー完成。いや、PIローダーを作ってたんですけど、わかんないので棚上げしてMAGを作ったと。

GIMPのコメント PICローダーでもコメントがあれば読み込むようにしましたが、MAGはコメント領域にセーバーがなにがしかの情報を入れているようなのでGIMPの画像コメントに読み込むようにしました。

MAGフォーマットについては「まぐろのすべて」を参考にしました。丁寧に解説してあってとても助かりました。

さて、Javascript版のMAGローダーを見つけました。HTML5 まぐろーだー HTML5対応ということで、MAGファイルをドラッグ&ドロップしてやると画像が表示されます。ブラウザからファイルを開く必要がなく、ドラッグ&ドロップで済むというのはやはり便利ですねえ。

GIMP用画像ローダー作成計画 その4

この記事へのリンク

書こうと思ってたことを書き忘れてる気がするので続きをば。

X68用画像・国産画像フォーマットを現在のMacで表示するソフトがない、と書きましたが、方法がないわけではないです。SheepShaver でMacOS9環境を作ってやればPixelCatが使えます。また X68000EMでX68000環境を構築する方法もあります。(うちではどちらもとりあえず稼働する程度にはしてあるけど今から新たに環境を作るとしたら大変かも)

ということでビューワーは稼働しないこともない。それなのになんで自分で作ろうと思ったのかというと、色関係です。

X68000は16ビットカラーで、実際はたいがいのCGが15ビットカラーなのでRGB各5ビットずつ。今のパソコンは24ビットカラー・RGB各8ビットなので、表示するには5ビットを8ビットに換算する必要があります。足りない3ビット分をどうするか。ビューワーでは0で埋めるものが多いようです。この場合、15ビットカラーでの真っ白の色を24ビットカラーに換算すると 0xFFFFFF ではなく 0xF8F8F8 になります。数字で見てもわかんないので画像で見ましょう。
白色0xFFFFFFと0xF8F8F8の違い Aが0xFFFFFFで、Bが0xF8F8F8です。左側のように離れていると差はわかりませんが、右側のように隣り合っていると違いがあるのがわかります。もっとも、パソコンのグラフィック環境によってはわからんかもというところ。はっきり言ってそんなに差はないです。ビューワーが3ビットを0で埋める処理をするのは妥当と言えるでしょう。

ただ、私の目的は「古いフォーマットの作品を今のフォーマットに移したい」ことなので、それではちと困るというか嫌なわけで。まあ、グラフィックソフトのレベル調整あたりで補正は可能なんだけど面倒くさい(グラフィックソフトに読み込ませるにはエミュレータ上でビューワーで表示させて別フォーマットで保存して、という段取りが必要なので、さらに面倒くささ倍増)。ということで、GIMP用のプラグインを書いてみようとなったわけです。

さて、こうやってPythonで展開できるんだったらJavascriptでもできるよなー、と思ったらすでに作ってる人がいました。JavaScript PIC/Pi/MAG/MAKIファイルローダー。早いしコメントも表示してくれる。いいね。

さて余談です。上の5ビットのRGB値を8ビットに換算する計算方法についてです。

まず真面目に計算する方法。変換したい数値をCとすると、これは、C × (変換先のビットの数が取りうる最大値) ÷ (変換元のビットの数が取りうる最大値) です。5ビットから8ビットなので C × 255 ÷ 31 となり、結果の値は整数である必要があるので四捨五入するなりの処理をします。

次に0で埋める場合。これはコンピューターで計算する場合は「シフト演算」を使います。C<<3 という計算式になります。2進数を3桁左へずらして足りないところは0で補うという計算です。

そしてもう一つ。「足りない桁は元の数値の上の桁を繰り返したらいいんじゃね?」という手法です。計算式は (C<<3) + (C>>2) となります。真面目に割り算するよりも計算負荷は軽いはずなので簡易計算と呼んでおきましょう。

さて、真面目に割り算して四捨五入、真面目に割り算して切り捨て、簡易計算、0で埋める、この4者の計算結果にどれくらい違いが出るか、表にしてみました。(Javascriptに計算させて表示しています)

元の数(5bit)8bitに拡張
四捨五入切り捨て簡易計算0埋め