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

image-processing – 解码GIF87a栅格数据流的数据字节,第1张

概述我正在尝试从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),十进制6 我正在尝试从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.尝试他们工作的链接页面中的示例…

总结

以上是内存溢出为你收集整理的image-processing – 解码GIF87a栅格数据流的数据字节全部内容,希望文章能够帮你解决image-processing – 解码GIF87a栅格数据流的数据字节所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1107685.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存