Как я могу сделать так, чтобы тег 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", и он автоматически установлен? Смотрите мои примеры ниже...

http://oi42.tinypic.com/2nqe3nt.jpg

1 ответ

Решение

STRIPOFFSETS тег автоматически устанавливается библиотекой при записи данных изображения в файл.

Обычно не имеет значения, каково значение этого тега (конечно, если это не правильное число).

Но иногда возникает требование: данные изображения должны быть сохранены после заголовка каталога (страницы). Некоторые приложения требуют, чтобы TIFF были написаны таким образом.

В таком случае вы должны использовать вызов CheckpointDirectory метод перед любым из методов, которые записывают растровые данные в файл или поток для записи тегов TIFF перед растровыми данными.

CheckpointDirectory сохранит данные каталога вместе с данными тегов, но не закроет вывод, и вы сможете продолжить создание изображения.

Ваш код должен выглядеть примерно так:

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

 ...
 tif.WriteRawStrip(..);
 ...
}
Другие вопросы по тегам