Как я могу сделать так, чтобы тег StripOffsets оставался неизменным при использовании библиотеки LibTiff.Net 2.3? - PullRequest
1 голос
/ 25 февраля 2012

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

Результаты AsTiffTagViewer http://oi42.tinypic.com/2nqe3nt.jpg

1 Ответ

3 голосов
/ 25 февраля 2012
Тег

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

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

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

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

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

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

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

 ...
 tif.WriteRawStrip(..);
 ...
}
...