この3MF Project GIFを読んでください。すべてのサブセクションには、ステッピングの例で必要なものがすべて含まれており、残りは仕様ファイルにあります。
今度は画像データ
ストリーム データは 1 バイトのブロック サイズで始まり、ビット ストリームになります。最後に、別のブロック サイズが続きます。フレーム全体を描画し、最後に読み取ったブロックの後にポインターを設定すると停止します。
ブロックサイズが見つかった場合0
は、フレームデータの終わりを意味します。0x3b
その後にターミネータがある場合は、ファイルの終わりに到達します。
ローカル カラー ビットは、開始時にストリーム内のコードごとにいくつのビットがあるかを示します。
実際に処理された BYTE の LSB を読み取り、それを右にシフトしてからコードを右にシフトし、このビットを MSB として追加します。必要なインデックスのビット数に達したら、LZW 解凍によって処理し、辞書に新しいコードを追加します。
辞書が 2^bits 境界を越える場合、コードのビットサイズを増やして続行します。クリアとエンドの特殊コードを処理することを忘れないでください...
だからあなたは持っています:06 6b 40 86 70 48 2c 1a
06h
は初期ビット サイズ - 1 なので、実際のビット サイズは7
!!!
6bh
ブロックサイズはバイトです
40h
明確なコードです (表に 64 色が存在しcolor[]
、最初の空きインデックスが 66 であることを意味します)
86 70 48 2c 1a [hex]= |1 0000110|01 110000|010 01000|0010 1100|00011 010| [bin]
コードは次のとおりです。
|0000110|110000 1|01000 01|1100 010|010 0010| [bin]
|0000110|1100001 |0100001 |11000010|0100010 | [bin]
06,61,21,c2,22 [hex]
データの61h
提案エラーは、これが本当に画像データの始まりですか (またはどこかで間違いを犯しました)? コードは、ディクショナリの最大インデックスよりも 1 つだけ大きくすることができます。ディクショナリは、最初のコードを除く各コードによって増加するため61h
、ディクショナリの処理中42h
はサイズのみです。リンクされたページの例を試してみてください...