Как я могу сделать так, чтобы тег StripOffsets оставался неизменным при использовании библиотеки LibTiff.Net 2.3?
У меня есть оригинальное изображение с тегом StripOffsets = 768. Когда я редактирую изображение в памяти, а затем записываю его обратно в файл, я пытаюсь вручную установить для тега StripOffsets то же значение оригинала, которое равно 768 (используя следующий метод).
//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);
По какой-то причине конечным результатом является StripOffsets = 8. Почему он не установит StripOffsets так, как я хочу? С другой стороны, это также влияет на мое "смещение страницы", показанное в AWare Systems AsTiffTagViewer. Я уверен, что это связано с той же проблемой. Почему-то я неправильно сохраняю tiff. Может быть, я не могу вручную установить тег "StripOffsets", и он автоматически установлен? Смотрите мои примеры ниже...
1 ответ
STRIPOFFSETS
тег автоматически устанавливается библиотекой при записи данных изображения в файл.
Обычно не имеет значения, каково значение этого тега (конечно, если это не правильное число).
Но иногда возникает требование: данные изображения должны быть сохранены после заголовка каталога (страницы). Некоторые приложения требуют, чтобы TIFF были написаны таким образом.
В таком случае вы должны использовать вызов CheckpointDirectory
метод перед любым из методов, которые записывают растровые данные в файл или поток для записи тегов TIFF перед растровыми данными.
CheckpointDirectory
сохранит данные каталога вместе с данными тегов, но не закроет вывод, и вы сможете продолжить создание изображения.
Ваш код должен выглядеть примерно так:
using (Tiff tif = Tiff.Open("file.tif", "w"))
{
...
tif.SetField(..);
...
tif.SetField(..);
tif.CheckpointDirectory();
...
tif.WriteRawStrip(..);
...
}