Итак, у меня есть этот 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.
Вот это вставлено в документы:
Пока это мой 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 символов, существует бесконечный цикл. Зачем?
Насколько я могу судить, вы распаковываете двоичные значения с плавающей запятой и рассматриваете их как ASCII, что создает нечто, похожее на мусор.
Других решений пока нет …