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规格:@L_301_0@
栅格流应该具有指向全局映射(或LZW树中的父级)的索引…但我不确定如何读取它.
有人可以转换前几个字节(从86开始)作为例子吗?
解决方法
现在的图像数据
流数据以1字节块大小开始,然后进入比特流.最后是另一个块大小.当您绘制整个帧然后在最后一个重新加载的块之后设置指针时,它会停止.
如果您发现块大小为0,则表示帧数据结束.如果在此之后存在终止符0x3b,则到达文件结尾.
本地颜色位告诉您启动时流中每个代码有多少位.
我读取了实际处理过的BYTE的LSB,然后将其向右移,然后将代码右移,并将该位添加为MSB.通过LZW解压缩到达索引处理所需的位数后,还会向字典添加新代码.
如果字典交叉2 ^位边界增加代码bitsize并继续.不要忘记处理明确和结束的特殊代码……
所以你有:06 6b 40 86 70 48 2c 1a
> 06h是初始位大小 – 1所以真正的位大小是7!
> 6bh是块大小(以字节为单位)
> 40h是清晰的代码(意思是color []表中存在64种颜色,第一个自由索引是66)
> 86 70 48 2c 1a [hex] = | 1 0000110 | 01 110000 | 010 01000 | 0010 1100 | 00011 010 | [二进制]
所以代码是:
> | 0000110 | 110000 1 | 01000 01 | 1100 010 | 010 0010 | [二进制]
> | 0000110 | 1100001 | 0100001 | 11000010 | 0100010 | [二进制]
> 06,61,21,c2,22 [hex]
61h建议数据错误是图像数据的真正开始(或者我在某处犯了错误)?代码只能是字典中的一个大于最大索引的代码.除了第一个代码之外,每个代码增加字典,因此在处理61h时字典的大小仅为42h.尝试他们工作的链接页面中的示例…