解压缩TIFF数据会打印随机字符

时间:2017-07-03 14:41:48

标签: c++ zlib ifstream tiff inflate

所以我有这个TIFF,压缩32946,这是COMPRESSION_DEFLATE。

我正在手工阅读:

ifstream istream;
std::string line;
TIFHEAD header;
istream.open("pic.tif",ios::binary|ios::in);
istream.read((char*)&header, sizeof(TIFHEAD));
istream.seekg(header.IFDOffset);

WORD numEntries1;
istream.read((char *)&numEntries1, sizeof(WORD));
cout<<numEntries1<<endl;

DWORD tagOffset;
DWORD stripByte;

for(int i=0; i<numEntries1; i++) {
    TIFTAG tag;
    istream.read((char *)&tag, sizeof(TIFTAG));
}

并找到所有TIFF十六进制值。

我现在有一个值data3.txt,它包含来自hexdump的所有十六进制值。 Here它被粘贴到文档中:

这是我的zlib代码到目前为止,对于大多数数据,它打印正确(由于某种原因,中途,它开始重复打印000和换行符,然后转换为非ASCII字符)。

int main(int argc, char **argv) {
    gzFile inFileZ = gzopen("data3.txt", "rb");
    unsigned char unzipBuffer[4];
    uint8_t unzippedBytes;
    while (true) {
        unzippedBytes = gzread(inFileZ, unzipBuffer, 4);
        std::cout<<std::hex<<unzipBuffer<<std::endl;
        z_stream stream;
        stream.next_in = unzipBuffer;
        inflate(&stream, 1);
        std::cout<<stream.next_in<<std::endl;
    }
    gzclose(inFileZ);
}

并且打印出的第二件事部分是值和部分非ASCII字符。这是为什么?

如果不清楚,我的最终目标是手动读取TIFF,每个像素都有浮点数。我想得到所有那些花车。

编辑:此外,即使data3.txt只包含12个字符,也存在无限循环。为什么呢?

1 个答案:

答案 0 :(得分:1)

据我所知,你可以解压缩二进制浮点值并将它们视为ASCII,这会产生看似垃圾的东西。