C# LibTiff.Net - MultiTIFF 更改标签值

C# LibTiff.Net - MultiTIFF change Tag-Values

我想用 LibTiff.net 设置或更改多 TIFF 文件中的一些标签。所以我目前使用 SetDirectory() 切换子图像,更新一些字段并使用 CheckpointDirectory()-Function 检查。当我这样做时,只有生成的多 TIFF 文件中的第一张图像是可见的,其他图像是完全黑色的。即使不使用以下代码更改任何标签,也会发生这种情况。我错过了什么?

如果我在 For 循环外设置 CheckoutDirectory 函数,所有图片都会按需要显示,但我想更改所有 SubTiff 的标签,而不仅仅是最后一个的标签。

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();
            }  
        }
}

黑色图像的最可能原因是图像数据损坏。

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

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

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