2011-08-15 3 views
10

Je suis en train d'écrire 10,12 bits RVB fichiers TIFF avec LibTIFF.écriture 10,12 fichiers TIFF bits avec LibTIFF C++

Les données de pixel est enregistré localement dans un tampon unsigned short (16bits)

1) Si je place TIFFTAG_BITSPERSAMPLE à 10 ou 12, les bits insuffisant sont lues à partir du tampon, et la sortie est incorrecte. (Je comprends qu'il est juste de lire 10 ou 12 bits par composant, au lieu de 16 et c'est le problème)

2) J'ai essayé d'emballer les bits dans le tampon, de sorte qu'il est vraiment 12-R, 12- G, 12-B. Dans ce cas, je pense que le fichier est écrit correctement, mais aucun spectateur que je pourrais trouver pourrait afficher cette image correctement. 3) Si je règle TIFFTAG_BITSPERSAMPLE à 16, les téléspectateurs peuvent afficher l'image TIFF, mais alors j'ai un problème que je ne sais pas si l'image était à l'origine 10 ou 12 bits (Si je veux lire plus tard avec LibTIFF). En outre, le spectateur s'attend à ce que la plage dynamique soit de 16 bits et non de 10 ou 12, ce qui entraîne également une mauvaise vue.

4) La partie la plus ennuyeuse est que je ne pouvais pas trouver une image TIFF 10, 12 ou 14 bits sur le web pour voir à quoi l'en-tête est censé ressembler.

Donc finalement, quelle est la bonne façon d'écrire 10 ou 12 bits de données image dans un fichier TIFF ?????

+0

J'ai demandé il y a quelque temps la même question, aucun résultat, il semble que le format tiff n'a pas une telle étiquette. J'espère que je me trompe ... –

Répondre

8

The TIFF specification ne spécifie pas un moyen de stocker 10, 12 ou 14 bits par canal dans une image. Selon l'encodeur et le décodeur, il peut toujours être possible de travailler avec de telles images, mais il s'agit effectivement d'un détail d'implémentation, car ils ne sont pas requis pour cela.

Si vous voulez plus de 8 bits de précision dans un TIFF, votre seul choix est 16 (ou virgule flottante, mais c'est une histoire différente). Je ne connais aucun format d'image avec un support spécifique pour ces bitdepths, donc les spectateurs seront probablement un problème de toute façon si vous devez stocker l'image avec ce bitdepth spécifique. La solution de contournement la plus simple que je puisse imaginer serait de simplement stocker 16 bits par pixel et de mettre le bitdepth original en métadonnées (par exemple dans une balise ImageDescription), mais tout dépend de l'utilisation des images et de la raison de cette information .

+0

En fait, je recommanderais aussi cela comme une solution, car les profondeurs exotiques ne vous donneront rien de bon. –

+0

J'ai utilisé 16 bits par échantillon et codé le bitdepth réel en tant que métadonnées. Merci – Itsik

Questions connexes