Распаковка дефлированных данных TIFF

У меня есть этот код:

ifstream istream;
std::string line;
TIFHEAD header;
istream.open("pic.tif",ios::binary|ios::in);
istream.read((char*)&header, sizeof(TIFHEAD));
cout<<hex<<header.Identifier<<" "<<header.Version<<" "<<header.IFDOffset<<endl<<endl;
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));
cout<<istream.tellg()<<":"<<tag.TagId<<" "<<tag.DataType<<" "<<tag.DataCount<<" "<<tag.DataOffset<<endl;
}

Я также сделал hexdump на pic.tif и получил около 450 строк шестнадцатеричных значений, многие из которых были отражены в данных тега и заголовке, который я печатаю.

Но я обнаружил, что этот TIFF имеет сжатие 32946, которое является COMPRESSION_DEFLATE.

Как я могу распаковать другие шестнадцатеричные значения из hexdump, чтобы получить фактические значения с плавающей точкой из этого TIFF? Я знаю, что Zlib может распаковывать, но может ли он распаковывать сжатие при сжатии, и если да, то как?

Я знаю, что значения с плавающей точкой должны быть через LibTIFF, но я не могу это использовать. Это 32-битный формат 512×512, который имеет значения с плавающей точкой.

Кроме того, я могу опубликовать дополнительную информацию о TIFF или значениях из hexdump, если кто-то захочет его увидеть.

3

Решение

Каждый сегмент представляет собой стандартный поток zlib, то есть данные, сжатые методом дефляции, с заголовком zlib и трейлером. Вы можете использовать Zlib’s uncompress() или же inflateInit() / inflate() / inflateEnd() функции.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]