【问题标题】:LZW Decompress: Why is first dictionary code encountered in TIFF strip 261 instead of 257, or am I misreading it?LZW 解压缩:为什么在 TIFF 条带中遇到的第一个字典代码是 261 而不是 257,还是我误读了它?
【发布时间】:2015-01-31 02:33:28
【问题描述】:

我有一个简单的 RGB 文件在 Photoshop 中保存为 TIFF,大约 1000 像素宽。第一行由 3 个像素组成,所有像素均为 16 进制 4B 红色、B0 绿色、78 蓝色,其余为白色。

条带是 LZW 编码的,条带的初始字节是:

80 12 D6 07 80 04 16 0C B4 27 A1 E0 D0 B8 64 36 ...(实际上只有前 7 个左右字节对我的问题很重要。)

在 9 位段中是:

100000000 001001011 010110000 001111000 000000000 100000101 100000110 ... (0x100) (0x4B) (0xB0) (0x78) (0x00) (0x105) (0x106)

据我了解,256 (0x100) 是重置代码,但为什么 261 (0x105) 之后的第一个扩展代码不是 257?我希望这指向的任何字典条目都是第二个像素的 4B/B0 对(很可能是),但是解压缩算法如何知道将 4B/B0 放置在 261 而不是 257?有人可以解释我在这里缺少什么吗? .tif 文件中的其他地方可能会表明这一点吗?非常感谢。 ~

【问题讨论】:

  • LZW 编码器总是生成较长的最后一个字符的字符串。 0x105 代码是下一个逻辑代码,它代表最后 4 个字符的字符串。这是您重复第一个 4 字节像素的方式。较低值的代码将是部分字符串(小于 4 个字节)或不完整的像素。
  • @BitBank - 谢谢 - 现在很有意义。我应该进一步解决它......

标签: tiff lzw


【解决方案1】:

让我们看看

256 (100h) is Clear
257 (101h) is EOF

在你的情况下,那么

4Bh B0h is 258 (102h)
B0h 78h is 259 (103h)
78h 00h is 260 (104h)
00h 00h is 261 (105h)

我觉得不错。 LZW 实际上可以在添加到表中的字符之前编码一个字符。

【讨论】:

  • 谢谢...显然我必须向前看(无限期地?)直到有问题的代码被插入到字典中。在浏览我遇到的伪代码时,这似乎没有必要。现在可以了。 OT - 尝试投票但“需要 15 级声望?”这样做?有没有办法承认这一点?再次感谢...
  • 我不知道你需要一定的代表级别来投票,我不记得那么久了:) - 没关系,你可以在其他时间回来做,如果你喜欢。
  • 也许对这个主题没有特别兴趣的人可以为我投票? :)
  • @haraldK - 谢谢,就这么做了 - 不知道这很容易 - 希望我的现实生活中的代表很容易提升 :)
猜你喜欢
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多