微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

image-processing – 解码GIF87a栅格数据流的数据字节

我正在尝试从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 Project GIF和所有小节,您可以通过步进示例获得所需的一切,其余部分在spec文件中.

现在的图像数据

流数据以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.尝试他们工作的链接页面中的示例…

原文地址:https://www.jb51.cc/html/232050.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐