使用LibTiff.Net更新现有映像中的标记复制目录

时间:2013-02-17 07:53:07

标签: c# .net libtiff libtiff.net

我正在尝试更改现有TIFF图像中几个自定义ASCII标记的值,如http://bitmiracle.com/libtiff/help/add-custom-tiff-tags-to-an-existing-tiff-image.aspx中的示例所示。

更改主要涉及添加现有标记的字符串,或添加不存在的自定义标记。

然而,当添加新标签时,LibTiff似乎在图像的末尾添加了一个全新的目录,而不是更改现有的目录,这是完整的。我已经使用WinHex验证了这一点,并尝试了一些不同的方法,如WriteDirectory,CheckpointDirectory。正在打开该文件以进行追加。

重复目录导致我们无法控制的另一个程序出现问题,该程序必须处理图像。

有没有办法只更新现有目录?或者,如果有必要重写整个文件,我可以得到一些指示,请问如何做到这一点?如果文件被重写,则还需要保留其他自定义标记。

2 个答案:

答案 0 :(得分:1)

如果将新标记添加到现有目录或更改某些现有标记,则最好用新标记替换现有目录。否则,您可能会使标记覆盖栅格数据(因为更新的目录需要比旧版本更多的空间)。

因此,如果程序无法正确处理具有更新目录链的文件,则表示您需要重写整个文件。

您可能希望查看该库附带的TiffCP实用程序的源代码。源代码应该为您提供足够的线索以便开始。该实用程序会重新压缩文件中的数据,但您可能不需要这样做。您只需使用ReadRawStripWriteRawStrip方法复制压缩数据即可。该实用程序还会复制所有标记。这是您在代码中必须要做的事情(同时更改/添加标签)。

答案 1 :(得分:0)

根据libbit.net文档: Tiff.Open Method

仅支持“r”“w”“a”模式,加上一些次要模式,没有“f +”,因为fopen支持读取和写入tiff。

本机libtiff库有一个实用程序,可用于更改指定的tiff标记:

tiffset -s XResolution 400 test.tif

tiffinfo test.tif 可以用来验证结果。