画像処理 その2
■ このスレッドは過去ログ倉庫に格納されています
0780名無し@沢村
NGNG特許に触れずにGIFがつくれる完全な解説だから、ROMれ。
まずGIFフォーマットだが、いろんなサイトに解説が書いてあり、読めばこれは幼稚園でもわかるから、フォーマットについては書かん。
問題はGIFのデータ列だ。これは検索しても、英文の技術文書しか出てこんから、英語のできんおまいらにはわからんだろう?
また英語ができても幼稚園でもわかるようには解説してないから、読んでもわからんはずだ。
だがこれを読めば幼稚園でもわかるよ。
さて問題のGIFのデータ列だが、フォーマットには、圧縮ビットサイズ、ブロックサイズ、データ列、ブロックターミネータと書いてある。
これは全部重要だ。
さてGIFをつくる場合、まず圧縮ビットサイズを求めることから始めるんだ。
そこで圧縮したいビットマップのカラーテーブルを見る。カラーテーブルの配列数が16なら、16を表すには4ビット必要だから4になる。
最大の256色が使われている場合は、8だ。
次にデータ列だが、データ列はクリアコードからはじまる。
クリアコードは圧縮ビットサイズ*圧縮ビットサイズだ。
つまり2なら4。4なら16。8から64だ。
そしてふつーのデータ列が続くが、ふつーのデータ列のひとつのサイズは、圧縮ビットサイズ+1だ。
つまり2なら3ビット。4なら5ビット。8なら9ビットだ。
だがふつーデータは8ビットごとに表されるから、8ビットの中に例えばひとつ3ビットずつのデータを右から左にパックしていくんだ。
例をあげると、ビットマップのカラーテーブルが、
RGB[0]=00,00,00
RGB[1]=FF,FF,FF
と白と黒の2つで、ビットマップデータが0,1,0、つまり黒、白、黒と3ピクセルのデータだった場合、
GIFでは、まず圧縮ビットサイズが2だから、クリアコードは4になり、
GIFのデータ列は、最初がクリアコードだから、100。
データ列は圧縮ビットサイズ+1の3ビットで表されるから、000,001,000になる。
これを右から左にパックして、8ビットずつで表すと、01000100,0000だ。
■ このスレッドは過去ログ倉庫に格納されています