C#LibTiff.Net-多因子更改标记值

C#LibTiff.Net-多因子更改标记值,c#,tiff,libtiff,C#,Tiff,Libtiff,我想使用LibTiff.net设置或更改多TIFF文件中的一些标记。因此,我目前正在使用SetDirectory()切换子映像,更新一些字段,并使用CheckpointDirectory()函数签出。当我这样做时,只有生成的多TIFF文件中的第一个图像可见,其他图像完全是黑色的。这甚至在不使用以下代码更改任何标记的情况下发生。我错过了什么 如果我在For循环之外设置CheckoutDirectory函数,所有图片都将按需要显示,但我希望更改所有子项的标记,而不仅仅是最后一个子项的标记 publi

我想使用LibTiff.net设置或更改多TIFF文件中的一些标记。因此,我目前正在使用SetDirectory()切换子映像,更新一些字段,并使用CheckpointDirectory()函数签出。当我这样做时,只有生成的多TIFF文件中的第一个图像可见,其他图像完全是黑色的。这甚至在不使用以下代码更改任何标记的情况下发生。我错过了什么

如果我在For循环之外设置CheckoutDirectory函数,所有图片都将按需要显示,但我希望更改所有子项的标记,而不仅仅是最后一个子项的标记

public static void setRequiredTags(string outputFilePath)
    {
        using (Tiff image_MultiTIFF = Tiff.Open(outputFilePath, "a"))
        {
            for (int i = 0; i < image_MultiTIFF.NumberOfDirectories(); i++)
            { 
                // Load the Next Sub-TIFF
                   image_MultiTIFF.SetDirectory((short)i);  
                // setting custom tag  
                // image_MultiTIFF.SetField(TiffTag.PAGENUMBER, i, image_MultiTIFF.NumberOfDirectories());
                // image_MultiTIFF.SetField(TiffTag.DATETIME, DateTime.Now); 

                // rewrites directory saving new tag
                   image_MultiTIFF.CheckpointDirectory();
            }  
        }
}
publicstaticvoidsetrequiredtags(stringoutputfilepath)
{
使用(Tiff image\u multiff=Tiff.Open(outputFilePath,“a”))
{
对于(int i=0;i
黑色图像最可能的原因是图像数据损坏

当您更改标记中的某些内容并使用
CheckpointDirectory
WriteDirectory
保存更改时,库会在文件中的相同位置写入新数据。如果新目录数据大于旧数据,则下一个映像的某些部分可能会被覆盖(即损坏)

在所有情况下避免损坏的唯一方法是使用
RewriteDirectory

请注意,每次调用
RewriteDirectory
都会创建一个目录副本。目录的旧版本保留在文件中