正しいのは② です。
つまり:
新しい語(コード)を辞書に登録して辞書サイズが閾値(512, 1024, 2048)を超えた次の出力から、
ビット長を増やすのが正しい。
出力値 ビット長
510 9bit
511 9bit
300 10bit
400 10bit
512 10bit
513 10bit
GIFのLZW圧縮の基本
GIFは256色までの画像を扱う可逆圧縮形式。
圧縮方式はLZW(Lempel–Ziv–Welch)圧縮。
LZWは「繰り返されるパターンを辞書に登録して、辞書番号で置き換える」方式。
辞書初期化時には、色番号 + クリアコード + 終了コードを登録。
ビット長の可変について
GIFではファイル容量削減のためビット長が可変。
初期ビット長は、色数に応じた最小値からスタート(例:256色なら9bit)。
辞書登録数の増加に応じてビット長を増やす
(9bitの範囲)
コード出力: ... → 510 → 511
登録処理: 511登録により辞書サイズ=512
--ここで閾値到達--
(10bitの範囲)
コード出力: 300 → 400 → 512 → 513 ...