使用LibTiff.Net 2.3库时,如何让StripOffsets标记保持不变?

时间:2012-02-25 00:32:07

标签: c# tags tiff libtiff.net

我有一个标签为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”标签,它是自动设置?请参阅下面的示例...

Results from AsTiffTagViewer http://oi42.tinypic.com/2nqe3nt.jpg

1 个答案:

答案 0 :(得分:3)

当库将图像数据写入文件时,库会自动设置

STRIPOFFSETS标记。

通常这个标签的值是什么并不重要(当然,除非它是正确的数字)。

但有时需要:在目录(页面)标题之后保存图像数据 。有些应用程序需要以这种方式编写TIFF。

在这种情况下,你应该在任何一个之前调用CheckpointDirectory方法 将栅格数据写入文件或流以在栅格数据之前写入TIFF标记的方法。

CheckpointDirectory会将目录数据与标签数据一起保存,但不会关闭输出,您将能够继续创建图像。

您的代码应如下所示:

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

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