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