3

.gifC++ でファイルを作成する方法を理解しようとしています。LZWこれまでのところ、エンコーディングの仕組み以外はすべて理解できたと思います。これは、ラベル付きで生成したファイルです。

47 49 46 38 39 61 -header
0A 00 01 00 91 00 -logical screen descriptor
00 00 FF 00 FF 00 -color table [green,red,yellow,black]
00 FF FF 00 00 00
00 21 F9 04 00 00 -graphics control extension
00 00 00 2C 00 00 -image descriptor
00 00 0A 00 01 00 -(10 pixels wide x 1 pixel tall)
00 02 04 8A 05 00 -encoded image
3B                -terminator

ここでも、コピー/貼り付け用のラベルはありません。 00 0A 00 01 00 00 02 04 8A 05 00 3B

02 04 8A 05が画像にどのように変換されるかを理解するのに苦労していますyryryggyry02はコードの最小サイズで、04はイメージ ブロックの長さです。クリアとEOIコードは識別できたと思いますが、その間のコードがわかりません。

8A       05
10001010 00000101
100|01010 00000|101
 ^      ????     ^
 clear code      EOI code

.gifこれまでのところ、仕様 からほとんどの情報を取得しています: http://www.w3.org/Graphics/GIF/spec-gif89a.txt

また、この Web サイトも役に立ちました: http://www.matthewflickinger.com/lab/whatsinagif/lzw_image_data.asp

ありがとう

編集*

コメントにリンクされている Youtube ビデオを見て、カラー ストリーム「yryryggyry」の画像を手動でエンコードしました。

Color table-012=gry

2   1   2   1   2   0   0   2   1   2
010 001 010 001 010 000 000 010 001 010

current next output dict
010     001  010    21 6
001     010  001    12 7
010     001  -      -
001     010  110    121 8
010     000  010    212 9
000     000  000    00  10
000     010  1010   002 11
010     001  -      -
001     010  110    -
010     -    010    -

outputs-100 010 001 110 010 000 1010 110 010 101

01010101 4th 55
10101000 3rd A8
00101100 2nd 2C
01010100 1st 54

Code-54 2C A8 55

このコードは「yryryggyry」ではなく「yr」という画像を生成するため、間違いを犯したに違いありません

別の答えが得られるかどうかを確認するために作業をやり直します

4

1 に答える 1