阅读这个3MF 项目 GIF和所有小节,您需要的所有内容都包含步进示例,其余的都在规范文件中。
现在是图像数据
流数据以 1 字节块大小开始,然后进入比特流。最后是另一个块大小。当您绘制整个帧然后在最后读取的块之后设置指针时它会停止。
如果您找到块大小0
,则表示帧数据结束。如果之后有终止符0x3b
,则到达文件末尾。
本地颜色位告诉您在开始时流中每个代码有多少位。
我读取了实际处理的 BYTE 的 LSB,然后将其右移,然后将代码右移并将该位添加为它的 MSB。在达到所需的索引位数后,通过 LZW 解压缩并将新代码添加到字典中。
如果字典越过 2^bits 边界,则增加代码位大小并继续。不要忘记处理清除和结束特殊代码......
所以你有了: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| [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
大小。尝试他们工作的链接页面中的示例...