.gif
C++ でファイルを作成する方法を理解しようとしています。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
が画像にどのように変換されるかを理解するのに苦労していますyryryggyry
。02
はコードの最小サイズで、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」という画像を生成するため、間違いを犯したに違いありません
別の答えが得られるかどうかを確認するために作業をやり直します