2017-06-29 5 views
3

Je possède ce code:décompression des données TIFF dégonflés

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; 
} 

J'ai aussi fait un hexdump sur pic.tif, et a obtenu environ 450 lignes de valeurs hexagonales, dont beaucoup ont été reflétées par les données d'étiquette et en-tête I J'imprime.

Mais j'ai trouvé que ce TIFF a la compression 32946, qui est COMPRESSION_DEFLATE.

Comment puis-je décompresser les autres valeurs hexadécimales du hexdump pour obtenir les valeurs float réelles de ce TIFF? Je sais que Zlib peut décompresser, mais peut-il décompresser la compression de dégonflement, et si oui, comment?

Je sais ce que les valeurs flottantes doivent être à travers LibTIFF, mais je ne peux pas l'utiliser.Il s'agit d'un tiff 32 bits 512x512 qui a des valeurs flottantes.

En outre, je peux poster plus d'informations sur le TIFF ou les valeurs de hexdump si quelqu'un veut le voir.

Répondre

1

Chaque segment est un flux zlib standard, c'est-à-dire des données comprimées par compression avec un en-tête zlib et une bande-annonce. Vous pouvez utiliser les fonctions uncompress() ou inflateInit()/inflate()/inflateEnd() de zlib.

+0

Seriez-vous par hasard prêt à donner un exemple? Je l'ai recherché et je reçois juste des espaces vides lorsque les données reviennent ... –

+0

Cela ne devient pas plus simple que d'utiliser 'uncompress()'. Remplissez simplement les paramètres. –