【发布时间】:2016-03-02 18:54:51
【问题描述】:
我正在编写一个通用的 LZW 解码器 c++ 程序,但我无法找到有关所用代码字长度(以位为单位)的文档。我发现的一些文章说码字的长度是 12 位,而另一些文章说是 16 位,而还有一些文章说使用了可变位长。那么它是哪一个?对我来说,位长是可变的是有道理的,因为这会提供最好的压缩(即最初从 9 位开始,然后在必要时移动到 10,然后移动到 11 等等......)。但我找不到任何关于行业标准的“官方”文档。
例如,如果我要打开 Microsoft Paint 并创建一个简单的 100x100 像素全黑图像并将其保存为 Tiff。图像使用 LZW 压缩保存在 Tiff 中。所以在这种情况下,当我解析 LZW 码字时,我应该为第一个码字读取 9 位、12 位还是 16 位?我怎么知道要使用哪个?
感谢您提供的任何帮助。
【问题讨论】:
-
LZW 本身只是一种算法,您不会找到特定参数的行业标准。为此,您需要深入研究每个应用程序,在您的示例中为 TIFF 规范。
-
感谢 Mark 让我搜索 LZW 的 Tiff 实现。我只是认为这是一个通用算法......原来他们在字典中有一些保留条目(例如 Clear 和 EndOfInformation)以及我错了的位顺序信息。