1

使用 LZW 解压缩解码 tiff 文件时,编码比特流中的前 9 位应为“256”,即明码。

但是当我读到它时,我得到了一个 128,我就是想不通。我用GDAL创建了文件。

我读取文件的代码是:

val res = (for {
  i <- 0 until next
  if (bitSet.get(i + index))
  } yield (1 << i)).sum

索引是编码比特流中的索引,接下来是我应该读取多少位(从 9 开始)。

所以我的问题是为什么我读的是 128 而不是 256?打印比特流输入时,设置为 1 的第一位是第 8 位(索引 7)。

有问题的文件是:https ://dl.dropboxusercontent.com/u/42266515/aspect_lzw.tif

谢谢!

4

1 回答 1

4

感谢您发布示例图片。图像没有问题;第一个代码是 0x100 (256)。您必须记住,TIFF LZW 是按“摩托罗拉”字节顺序编码的。文件的前两个字节是 0x80 0x00。在二进制中,它是 10000000 00000000。前 9 位(按正确顺序查看时)是 100000000,即 256。您必须以大端顺序收集字节,然后才能正确解码。这是一个示例字节流:

If the data from the file is: 0x80 0x01 0x25 0x43 0x7E

The bits are (laid out in big-endian order)
10000000 00000001 00100101 01000011 01111110

Taking 9-bit codes from this bitstream will get you:
100000000 (256), 000000100 (4), 100101010 (298), ...
于 2014-07-22T15:35:30.697 回答