我已经阅读了许多关于GIF LZW解压的文章,但我仍然对它是如何工作的,或者在编码方面如何解决更繁琐的编码部分感到困惑。
据我所知,当我在GIF中找到LZW压缩数据的字节流时,该流告诉我:
最小代码大小,AKA第一个字节开始的位数。
现在,据我所知,我必须为清晰代码添加一个,或者为清晰代码和EOI代码添加两个。但我搞不懂这是哪一种?
因此,假设我有3个颜色代码(01,10,11),假设EOI代码(如00),跟随最小代码大小( 2)的字节是2位,还是将3位分解到明码中?或者清晰代码/EOI代码都已经包含在最小大小中了吗?
第二个问题是,从文件中读取动态大小的位的最简单方法是什么?因为从一个偶数字节(8)中读取奇数位(3位,12位等)听起来可能是混乱和错误的?
发布于 2013-03-22 14:57:21
从你的第二个问题开始:是的,你必须从一个8位字节流中读取动态大小的位。您必须跟踪您正在读取的大小,以及先前读取操作留下的未使用的位数(用于正确放置文件中的“下一个字节”)。
IIRC的最小编码长度为8位,这将为您提供256 (基数为10)的清晰编码和257的输入结束。然后,第一个存储的代码是258。
我不确定你为什么不去查一下其中一个公共领域图形库的源代码。我知道我没有,因为回到1989年(!)没有图书馆可以使用,也没有完整描述的互联网。我不得不从一个示例可执行文件(用于Compuserve的MS-DOS )中实现一个解码器,它可以显示图像和一些GIF文件,所以我知道这是可以做到的(但这不是花费时间的最有效方式)。
https://stackoverflow.com/questions/13215654
复制相似问题