从多个tiff获取页面

时间:2012-08-21 13:01:44

标签: c# tiff libtiff.net

NET库检索多个tiff中的页数。我用的是样品 http://bitmiracle.com/libtiff/help/retrieve-number-of-pages-in-tiff-image.aspx

    public int GetNumberOfPages(Tiff image)
    {
        int pageCount = 0;
        do
        {
            ++pageCount;
        } while (image.ReadDirectory());

        return pageCount;
    }

    [TestMethod]
    public void GetNumberOfPages()
    {
        using (Tiff tiffFromFile = Tiff.Open(@"test.tif", "r"))
        {
            int numberOfPages = GetNumberOfPages(tiffFromFile);
        }

    }

我得到例外:无法写入已关闭的TextWriter。

堆栈跟踪:

at System.IO.__Error.WriterClosed()
   at System.IO.StringWriter.Write(String value)
   at Microsoft.VisualStudio.TestTools.TestTypes.Unit.ThreadSafeStringWriter.Write(String value)
   at System.IO.TextWriter.Write(String format, Object arg0)
   at System.IO.TextWriter.SyncTextWriter.Write(String format, Object arg0)
   at BitMiracle.LibTiff.Classic.TiffErrorHandler.WarningHandler(Tiff tif, String method, String format, Object[] args)
   at BitMiracle.LibTiff.Classic.Tiff.WarningExt(Tiff tif, Object clientData, String method, String format, Object[] args)
   at BitMiracle.LibTiff.Classic.Tiff.ReadDirectory()

代码与样本完全相同。我找不到这个问题的根源。

1 个答案:

答案 0 :(得分:2)

我猜这个问题可能与不受支持的图像类型或传递它的tiff文件中的错误有关。 LibTiff文档讨论如果要响应错误,添加自定义处理程序。以前没有使用过那个库,我不能肯定地说发生了什么。我猜可能在Open中可能存在错误,但没有处理程序,它就会出错。然后,当您尝试ReadDirectory时,文件已经关闭。这只是猜测。我建议你添加一个错误处理程序,看看发生了什么。

http://bitmiracle.com/libtiff/help/tiff.seterrorhandler.aspx

编辑:

我回头看了一下示例页面。他们实际上提供了两种读取页数的方法。您是否尝试过更简单的方法来查看是否以相同的方式失败? To calculate number of pages in a TIFF image the Tiff.NumberOfDirectories() method or a simple loop that traverses directories can be used. This sample shows both methods.

您应该可以将方法转换为:

public short GetNumberOfPages(Tiff image)
{
    return image.NumberOfDirectories()
}

如果您仍然遇到问题,请尝试使用您知道有效且具有多个页面的其他图片,以便排除图像问题。