我试图从GIF87a栅格数据流的数据字节进行解码。 我不确定如何阅读LZW变长编码(以及如何LSB ......至少显著字节先在这千篇一律)。 光栅数据流开始作为(十六进制)如下:
06 6b 40 86 70 48 2c 1a 8f 44 4b 44 22 89 58 8e 10 c7 e1 80
- 06 - 6>代码大小
- 图6b - >的107块字节计数
- 40 - >清楚码(2 ^ 6),其是在十进制64或40以十六进制
- 86 - 实际数据>启动
GIF87a规格: http://www.w3.org/Graphics/GIF/spec-gif87.txt
光栅流应该有一个指向全球地图(或在LZW树父)指标......但我不知道该如何解读它。
可能有人转换前几个字节(始于86)作为一个例子吗?
读这3MF项目GIF和所有小节有你需要加强的例子一切,剩下的就是在规范文件。
现在的图像数据
用1个字节块大小的流数据开始,然后进入的比特流。 在结束后进入另一个块大小。 它停在绘制整个帧那么最后readed块之后设置的指针。
如果发现块大小0
则表示帧数据的结束。 如果终止0x3b
那么之后到达文件的末尾。
当地色彩位告诉你在开始流中,你每码多少位有。
我读LSB实际处理的字节,然后转移是正确的再移位正确的代码,并添加该位作为它的MSB。 你到达后由LZW解压指数过程中它的所需位计数和新的代码添加到字典中。
如果字典交叉2 ^比特边界增加代码bitsize并继续。 不要忘了处理清楚,结束特殊代码...
所以,你必须: 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
建议在数据错误真的是这样开始的图像数据(或者我什么地方搞错了)? 该代码只能有一个更大然后在字典中最大的索引。 字典增加每个码除了第一所以在处理61h
字典是唯一42h
的尺寸。 尝试在他们的作品链接页面的例子...