1

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

代码与示例相同。我找不到这个问题的根源。

4

1 回答 1

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

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

于 2012-08-21T13:14:46.573 回答