GIFフォーマット講座3〜画像データの展開2009-06-03GIFフォーマット講座3〜画像データの展開GIFフォーマット(完結)今日は画像データの展開の仕方について。画像をデコードする際は基本的にエンコードの逆をたどればいいのです。Sizeを読み込んで保存しておく。ブロックサイズを読み取る。1で読み取ったサイズまでをデコードする。ブロックサイズが0だったら終わり。今回はブロックサイズを読み込む過程は無視して解説します。(単純にいったんエンコードした物を255byte以下の小ブロックに分割しただけで、元は全体で一つなので、解説する上では必要ない。実際にデコードする際は、以下に述べる方法に、Nbyte読み込む事にブロックサイズがちょくちょく割り込んでいると思えば良いだけである。)さて、前々回で10010010を圧縮すると100240になりました。逆に100240を10010010に戻してみましょう。手順は大まかにこんな感じです。a.最初の数を出力数に、次の数を待機数に読み込みます。b.辞書の出力数のページの値と辞書の待機数のページにある値の最初の文字を並べた数を辞書の新しいページに書き込みます。c.辞書の出力数のページに書かれている値を書き出します。d.待機数を出力数に、新しく一つ読み込んで待機数に入れます。e.以下、b〜dの繰り返しまぁ、やってみましょう。例の汚い手描きですよ。今回は0.1からなる数列ですので、辞書に0,1を登録しておきます。(ここではまだ、クリアコードとか考えていないので、この二つだけです)B:出力数。K:待機数ちゃんと元の10010010に戻りましたね。これだけではうまくいかないこともあります。0,1からなる数列111を圧縮してみて下さい。この12を展開してみましょう。1を出力数に、2を待機数にセットします。次に辞書登録を行います。辞書の1P目の「1」と辞書の2P目にかかれている最初の値......って、辞書はまだ1P目までしか登録されていません。2P目は今回登録するのにいったいどうしろと言うのでしょう。仮に2P目の最初の値をxと仮定しますそうすると、2P目に登録される数は「1x」となりますね。おや?xは2P目の最初の数、という条件がありますから「1x」の最初の数、つまり、1ということが決まります。よって、x=1となり、2Pに登録する数は11となります。一般化して言えば、今回登録するページが待機数に出た場合、辞書に登録する値は「出力数のページの値とその値の最初の数を並べた物」が辞書に登録されます。基本的にはこれで終わりです。後は、クリアコード、終了コードは出力しない、辞書に登録している個数が、2^nになったときは読み込みビット長を1増やす、クリアコードが出たら辞書の初期化、ビットは右から詰まっていることなど、エンコード時と同じ事に注意すれば問題なくデコードできるかと思います。byte単位から必要bit分だけ読み出すのは中々面倒くさいです。2016の9日目の@arachan@gith...2015-08-13入力候補が出るTextField作ってみた夏風邪ひいて熱が出たり咳が出たり鼻水出たりでしんどいですが...2013-09-07Javaでマルチスレッドするときの注意をまとめてみた数年ぶりとかいうレベルでJavaのスレッドに触ったもんだから色...2011-04-30読み込み中の画像を表示させる↑というのがググっても出てこなかったのでやってみた。-CoffeeScript-CoffeeScriptはMakefileの様な機能を提供しています。»プロフィールJavaで画像AI屋だったハズが、気がついたら制御論理やってて、Eclipse開発してて、組み込み屋で、CortexM4周りの開発してて、VerilogでRTL書いてて、STAしてて、色んな小さいインフラ管理してる、何でも屋。働きたくないでござる。(14)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。