1

GIF LZW 解凍に関する多数の記事を読んだことがありますが、それがどのように機能するか、またはコーディングの観点から、より厄介なコーディングのビットをどのように解決するかについて、いまだに混乱しています。

私が理解しているように、LZW 圧縮データの GIF のバイト ストリームに到達すると、ストリームは次のように伝えます。

最小コードサイズ、別名最初のバイトが始まるビット数。

さて、私が理解しているように、これにクリア コー​​ド用に 1 つ追加するか、クリア コー​​ドと EOI コード用に 2 つ追加する必要があります。しかし、私はそれがどれであるかについて混乱していますか?

つまり、3 つのカラー コード (01、10、11) があるとします。EOI コードを (00 として) 仮定すると、最小コード サイズ (2) に続くバイトは 2 ビットになるか、クリアを考慮して 3 ビットになります。コード?それとも、クリア コー​​ドと EOI コードの両方が既に最小サイズに組み込まれていますか?

2 番目の質問は、動的にサイズ変更されたビットをファイルから読み取る最も簡単な方法は何ですか? 偶数バイト (8) から奇数ビット (3 ビット、12 ビットなど) を読み取るのは、厄介でバグが多いように聞こえるからです。

4

1 に答える 1

0

2 番目の質問から始めます。はい、8 ビット バイトストリームから動的にサイズ変更されたビットを読み取る必要があります。読み取っているサイズと、以前の読み取り操作で残った未使用のビット数を追跡​​する必要があります (ファイルから「次のバイト」を正しく配置するために使用されます)。

IIRC には 8 ビットの最小コード サイズがあり、256 (基数 10) のクリア コー​​ドと 257 の入力の終了が得られます。最初に格納されたコードは 258 です。

パブリック ドメインのグラフィック ライブラリのソースを調べなかった理由がわかりません。1989 年 (!) に戻ると、使用するライブラリがなく、完全な説明を備えたインターネットがなかったので、私はそうしなかったことを知っています。画像といくつかの GIF ファイルを表示できるサンプル実行可能ファイル (Compuserve の MS-DOS 用) からデコーダを実装する必要があったので、実行できることはわかっています (ただし、時間を費やす最も効率的な方法ではありません)。

于 2013-03-22T06:57:20.967 に答える