GIF87a光栅数据流的解码的数据字节(Decode data bytes of GIF87a ra

2019-06-27 02:17发布

我试图从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)作为一个例子吗?

Answer 1:

读这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的尺寸。 尝试在他们的作品链接页面的例子...



文章来源: Decode data bytes of GIF87a raster data stream