使用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
谢谢!
答案 0 :(得分:4)
感谢您发布示例图片。图像没有错;第一个代码是0x100(256)。你必须记住,TIFF LZW编码在&#34; Motorola&#34;字节顺序。该文件的前两个字节是0x80 0x00。在二进制中,它是10000000 00000000.前9位(以正确的顺序查看)是100000000,即256.您必须以big-endian顺序收集字节,然后您才能解码它正确。这是一个示例字节流:
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), ...