開発じたばた日誌

前へ●●●次へ
じたばた日誌目次へ戻る
TSUCHY Softへ戻る


TYOTTO GIF2編

 やはり予期せぬことがありました。アニメーションGIFです。 これは一つのファイルにいくつもの画像が入っています。 一つの画像が終わると、次の画像データがくると思っていたのですが、ヘッダがくることがあるのです。 つまり最初の絵は「縦100ドット、横100ドット」だったのが二つ目の絵は「縦30ドット、横20ドット」 になっている場合があるのです。おまけに表示する左上の座標が(0,0)ではないことが多いのです。

 このような画像は画像の一部だけがアニメーションします。 なるほど、こうしてできるだけ転送するデータを少なくしているんだね。

 圧縮データの単位が8ビットではないということも苦労に拍車をかけました。 最初は3ビットが1単位かもしれないのです。 そして恐ろしいことに3ビットで足りなくなると4ビット、5ビットと1単位のビット長が長くなるのです。 そしてどのタイミングでデータ長を長くするか、その解釈はデータそのものに書いてあるわけではなくて 「ん、もう3ビットでは足りないな。じゃこんどからは4ビットだな」と自分で適切に判断しないといけないのです。 この判断に誤りがあると、もうぐちゃぐちゃのものしか表示されません。

 さらに困ったことに、参考書は圧縮方法の原理を解説していて、GIFのファイルフォーマットまでは面倒みていません。 参考書では解説されていないみょーなコードがくることがあります。 このときどう処理すればいいのかは英語の文献に頼るしかありません。

 クリアコードというものがくることがあります。 これはファイルによっては一度しかこないこともあるし、何度もくることがあります。 これが来たときどうすればいいのか、なかなかわかりませんでした。

 まずクリアコードというのは特定の値ではなく、 そのときの最初のデータ単位の長さ(ヘッダで定義される)で決定されるのです。 これに気づくのに一苦労。 おまけにこれが来たら、それまで蓄積した辞書をご破算にして、 持っているデータを全て画像データとして出力します。

 ハアハア、フウフウ、なんとか表示されるようになったぞ。