【问题标题】:Decompressing TIFF data prints random character解压 TIFF 数据打印随机字符
【发布时间】:2017-07-03 14:41:47
【问题描述】:

所以我有这个 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 个字符,也存在无限循环。为什么?

【问题讨论】:

    标签: c++ zlib ifstream tiff inflate


    【解决方案1】:

    据我所知,您正在解压缩二进制浮点值并将它们视为 ASCII,这会产生看起来像垃圾的东西。

    【讨论】:

    • 这是有道理的,但是我如何查看花车以确保我得到正确的?
    • float *f = (float *) unzipBuffer;然后 printf("%f," f[i]) 检查它看起来像好的数据。如需更强大的解决方案,请参阅我的 IEEE754 函数github.com/MalcolmMcLean/ieee754
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2014-12-17
    相关资源
    最近更新 更多