Comment puis-je faire en sorte que la balise StripOffsets reste la même lors de l'utilisation de la bibliothèque LibTiff.Net 2.3 ?

StackOverflow https://stackoverflow.com/questions/9440004

  •  12-11-2019
  •  | 
  •  

Question

J'ai une image originale qui a une balise StripOffsets = 768.Lorsque je modifie l'image en mémoire, puis que je la réécris dans un fichier, j'essaie de définir spécifiquement la balise StripOffsets manuellement sur la même valeur que l'original, qui est 768 (en utilisant la méthode suivante).

//Set the height for the page
output.SetField(TiffTag.ROWSPERSTRIP, ttPage[i].Height);

//Set the offset for the page
output.SetField(TiffTag.STRIPOFFSETS, ttPage[i].StripOffset);

Pour une raison quelconque, le résultat final est StripOffsets = 8.Pourquoi ne définit-il pas les StripOffsets comme je le souhaite ?Sur une note latérale qui affecte également mon "Décalage de page" affiché dans AWare Systems AsTiffTagViewer.Je suis sûr que cela a à voir avec le même problème.D'une manière ou d'une autre, je n'enregistre pas correctement le tiff.Peut-être que je ne peux pas définir manuellement la balise « StripOffsets » et qu'elle est définie automatiquement ?Voir mes exemples ci-dessous...

Results from AsTiffTagViewer

Était-ce utile?

La solution

STRIPOFFSETS La balise est définie automatiquement par la bibliothèque lorsqu'elle écrit les données d'image dans le fichier.

Habituellement, la valeur de cette balise n'a pas d'importance (sauf si son numéro est correct, bien sûr).

Mais parfois, il y a l'exigence :données d'images doit être enregistré après l'en-tête du répertoire (page).Certaines applications nécessitent que les TIFF soient écrits de cette façon.

Dans un tel cas, vous devez utiliser un appel au CheckpointDirectory Méthode avant l'une des méthodes qui écrivent des données raster dans un fichier ou un flux pour écrire des balises TIFF avant les données raster.

CheckpointDirectory enregistrera les données du répertoire ainsi que les données des balises mais ne fermera pas la sortie et vous pourrez continuer à créer une image.

Votre code devrait ressembler à ceci :

using (Tiff tif = Tiff.Open("file.tif", "w"))
{
 ...
 tif.SetField(..);
 ...
 tif.SetField(..);
 tif.CheckpointDirectory();

 ...
 tif.WriteRawStrip(..);
 ...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top