J'essaie de lire un fichier TIFF en niveaux de gris 16 bits (BitsPerSample = 16) en utilisant un petit programme C pour convertir en un tableau de nombres à virgule flottante pour une analyse plus approfondie. Les données de pixel sont, selon les informations d'en-tête, dans une bande unique de 2048x2048 pixels. L'encodage est little-endian.
Avec ces informations d'en-tête, je m'attendais à être capable de lire un seul bloc de 2048x2048x2 octets et de l'interpréter comme des entiers de 2 octets de 2048x2048. Ce que je reçois en fait est une image de 1024x1024 pixels chacun, dont les deux inférieurs ne contiennent que des zéros. Si je lis le same file into Gimp ou Imagemagick, les deux me disent qu'ils doivent réduire à 8 bits (ce qui ne m'aide pas - j'ai besoin de la gamme complète), mais les pixels apparaissent dans les bons endroits: alt text http://users.aber.ac.uk/ruw/unlinked/15_inRT_0p457_gimp.png Cela suggère que mon idée sur la façon dont les données sont rangées dans une seule bande est fausse. D'un autre côté, le fichier doit être correctement formaté en termes d'informations d'en-tête, sinon Gimp ne le comprendrait pas correctement. Où vais-je mal?lecture en niveaux de gris 16 bits TIFF
sortie de tiffdump:
15_inRT_0p457.tiff:
Magic: 0x4949 Version: 0x2a
Directory 0: offset 8 (0x8) suivante 0 (0)
ImageWidth (256) LONG (4) 1 < 2048 >
imagelength (257) LONG (4) 1 < 2048>
BitsPerSample (258) SHORT (3) 1 < 16>
de compression (259) SHORT (3) 1 < 1>
photométrique (262) SHORT (3) 1 < 1>
stripoffsets (273) LONG (4) 1 < 4096>
orientation (274) SHORT (3) 1 < 1>
rowsperstrip (278) LONG (4) 1 < 2048>
StripByteCounts (279) LONG (4) 1 < 8388608>
XResolution (282) RATIONAL (5) 1 < 126,582>
YResolution (283) RATIONAL (5) 1 < 126,582>
ResolutionUnit (296) SHORT (3) 1 < 3 >
34710 (0x8796) LONG (4) 1 < 0>
(L'étiquette 34710 est l'information de la caméra; pour m'assurer que cela ne fait pas de différence, j'ai mis à zéro toute la gamme de la fin du répertoire du fichier image au début des données à 0x1000, et cela ne fait en fait aucune différence.)
Merci socle. StripOffsets pointe vers 0x1000, qui est le début des données - il est exactement à 2048x2048x2 octets de la fin du fichier. Je cours sous Linux, et tous nos paquets d'analyse de données sont écrits en C, donc j'ai peur de ne pas devenir votre client. – user53343