将TIFF标记设置为新值结果,并不会将标记设置为新值并导致奇怪的行为

时间:2014-07-15 13:33:56

标签: c# .net compression tiff libtiff

        using (Tiff input = Tiff.Open(@"new.tif", "r"))
        {
            if (input == null)
            {
                MessageBox.Show("Could not open incoming image");
                return;
            }

            if (input.IsTiled())
            {
                MessageBox.Show("Could not process tiled image");
                return;
            }

            using (Tiff output = Tiff.Open("newnew.tif", "w"))
            {
                int numberOfDirectories = input.NumberOfDirectories();
                int rps = 3500;
                for (short i = 0; i < numberOfDirectories; ++i)
                {
                    input.SetDirectory(i);
                    copyTags(input, output);
                    copyStrips(input, output);
                    output.SetField(TiffTag.ROWSPERSTRIP,rps);
                    output.WriteDirectory();
                }
                output.Close();
            }

        }

当我在“output.SetField(TiffTag.ROWSPERSTRIP,rps)”步骤之后调试输出值时,ROWSPERSTRIP标记值仍然是旧值并且未设置为新值

当我在“output.WriteDirectory()”步骤之后调试输出值时,ROWSPERSTRIP标记值突然设置为-1

任何人都可以解释这种奇怪的行为吗?

1 个答案:

答案 0 :(得分:2)

如果copyTags(input, output);copyStrips(input, output)执行了他们的名字暗示他们写入输出流,对吧?

然而,根据docs有一些,实际上相当某些字段,您在开始编写后无法设置。

引用:

  

TiffTag.ROWSPERSTRIP - 将数据写入文件/流后,标记的值可能不会更改。

所以我猜所有这些标记字段必须先设置。