つれづれなるままに 第三回
 
 久々の更新だね、ここも。
 
 今日のお題は企画で必要だから作ってみたファイルコンバーターについて、である。実際プログラム作るのが二回目なのに、バイナリファイルの扱いも分からないのに、ファイルコンバーターを作ることに無理があったのかもしれない。
 実際やりたいことは簡単なことだったのよ。
1.ヘッダをそのまま格納
2.色数(RGB要素)チェック
3.同じ色が何回続くかチェック
4.2と3を繰り返し格納
 この行程。まあ簡単に見える罠。…言い得て妙だな。
 いろいろサンプルソース見回ってやっとヘッダを抜き出すことと、色をチェックするまではOK。3でつまずいた。で、それを何とかしてみたら今度は元のファイルよりコンバート後の方がファイルサイズが大きいという事態に陥った(笑いたいけど笑えない)。
 実験に使ったのはKANONの水瀬家のリビング(夜・電灯付き)という640×480の背景画像である。もう少し付け加えるなら、フルカラー(24bit)で、78694色使用している。
 これをコンバートしたところ約900KB−>約1.6MBにまで跳ね上がった。これでは使い物にならない。
 僕の作った形式のファイルは4の格納するときに6byteも使用しているのが一つの原因だ。そのうち4byteが色数、2byteが繰り返しのカウントになっている。つまり一回の要素が6Byte必要なわけだ。
 色数数えるだけなら3byteでもいいのだが…1ピクセルのRGBに1byteずつ使うため…にそれぞれこの実験をやった現在の仕様ではこうなっていたりする。
 この形式だと採算をとるためには三回以上同じ色が続いてくれないといけない。二回だとどっこいどっこいだからね。(1ピクセルに3バイト使うならば2ピクセルには6byte使うわけである)
 だからうまくいけば900KB以下になるはずっだったのだ。えっと、640×480の画像ということは307200平方ピクセル(?)である。そこに78694色使用しているということは、同じ色が3.903…約4回同じ色が使われている計算である。この4回というのが連続して配置されていればいいものの、全然連続されて配置されていないらしい。そんじゃなきゃ約二倍弱なんて行くものか!
 さて、全ての画像が大きくなるわけではない。東鳩のあかり、立ち絵/お下げ、制服を256色からフルカラーにしてコンバートしたところ260KB−>160KBにはなったのである。
 256色そのままでコンバートした方がいいという説があるのだがまだ対応できていないのが実状である。フルカラーと256色ではファイル構造が大きく異なるのである。
 ヘッダ部分はほぼ共通ではある。フルカラーだとヘッダの後に直接ピクセル情報が来るのだが、256色はヘッダの後にパレット情報という物が入る。256色という物はフルカラーである約一千六百万色の内から256色に色を限定して使うわけである。そのため最大の256色をどの色を使うのか決めなくてはいけないらしい。その情報部分が大きな違いである。
 実際まだそこの構造を把握し切れていないため対応しきれないでいるのだ。だが、多分256色ではファイルサイズが大きくなることはないだろう。面積と色数の比を考えると大きくなられたら困る。変なディザ減色かけたヤツはその範疇からはずれるかも。
 LZHの形式も資料が存在するし、JPEGもPNGも資料を持っていたりするのだが…PNGは英語だし、JPEGはなんかうまくマスク作らないといけないし、LZHも今一歩。
 ただどれをやるにしてもいえることが一つ、VB計算おそい。
 追記その一 2000/12/11
 あまりにも役立たずのためファイルの形式から設計し直してみた。ヘッダはやはりそのままだが、今度は色を3Byte、カウントを1Byteのトータル4Byte一セットにしてみた。
 6Byteから4Byteにしたのだから小さくなってもらわなくては困る。
 一応期待の成果は出た…と思う。いままでが1.6MBだったのがこんどは1.0MBまでにはなったのである(笑)。って、まだでかいやん!
 だが、キャラの方ではまあまあの性能を発揮してくれる。260KB−>100KB
 それでも…それでも、だ。問題はあるのである。
 勝手に256色に直すんじゃねぇ! しかも単純近似かい!(表示できない色はその色に一番近い表示可能な色として描画する方法)おかげで変な事態になったじゃねぇか。900KB−>1.0MB−>900KB−>500KB・・・あれ? あのなぁ。…僕がSAVE PictureでBMPをセーブしたのがいけなかったのかもしれないけどさぁ。
 ついでに、もひとつ!遅せぇ! MP3かけながら640×480の24bitBMPを変換するのに40秒もかかってんじゃねぇよ!(CPU=WinChip200) 使いもんにならねぇじゃねぇか。ちなみにP100の特に何もさせてないヤツで20秒だっけかな。AMD−K6−2−550だとたった2秒という悲しいけど泣けない結果になりました。
 追加報告が入り次第追加していく予定
 
つれづれ表紙
 
Ereyインデックスまで戻る