GIFプラグインがようやくできた。

自分のプログラム用のライブラリだが、Webに組み込んで使ったりする手前、
他のプログラムを使ったりすると厄介になる。

BMPは超簡単なフォーマットなので、すでに解析プラグインは作ったのだが、
GIFは面倒なのでパスしていた。

最近は、LWZの特許も切れ、解説がWebで読めたりするので、
BMPを解析したときのように、書籍(グラフィック・ファイル・フォーマット)を片手に
プログラムする必要がなくなった。

(でも、書籍の方がしっくりくるよ。持ってると安心するし!)

参考にさせていただいたのは、以下のサイト。

『とほほのWWW入門』


というわけで、ここでは実際に作ったときにちょっと手間取った部分を解説。


----

一般的なGIFとして、256色の画像だったとすると、スタート時のbitは、9bit。 (8+1bit)
つまり、1データを9bitで表現する。

gifのイメージブロック、イメージデータから、1Byte取得すると、8bit。
これでは足りないので、もう1Byte取得して、16bitにする。

そして、そこから9bitを使用して、デコード処理。
残りは7bitになるので、次の1Byteを取得して、15bitにし、9bitを使用してデコード。

これを繰り返す。

最初は9bitなので、辞書に登録できる単語は512個まで。
登録して、512個になった次の処理から、1データの表現が即10bitになる。
その際、端数bitをクリアしたりの処理は行なわれない。

gifの場合、辞書の登録は4096を超えられないので、一杯になる前に辞書のリセットが行なわれる。
イメージブロックは1ブロック255Byteまでの複数のブロックで構成されている。

これらの処理で、複数のブロックにまたがって処理をする際や、辞書リセットの際にも、
端数bitのクリアはされないようだ。

(される、と書いてあるサイトもあるようだが)

あとは、LWZのアルゴリズムが面倒だっただけで、なんとかできた。
まぁ、デコードだけなんで、エンコード部分はこれからなのだが。

画像のサイズから算出したピクセル数と、デコードしたピクセル数がぴったり一致したときは、
おおっ!
と思わず声が出てしまったぜ。

久しぶりに頭を使ったプログラムであった、、、。
[PR]
by miries | 2009-08-08 00:11 | ゲームを作る


<< フリフ・オンライン・モバイル ルーンアークオンライン・その5 >>