LIBTiff.net零扫描线尺寸

时间:2014-07-03 06:56:27

标签: c# libtiff.net

我正在阅读报告零扫描线尺寸的特定TIF文件。读操作返回null。

tiff = Tiff.ClientOpen("image", Stream.Length == 0 ? "w" : "ra", Stream, new TIFFTruncStream());

tiff == null,日志中包含Zero scanline size跟踪消息。

.NET框架和其他一些 无法打开文件,我们已经设法在一些较旧的IBM查看器中打开文件。这绝对是一个损坏的文件,还是只有LibTiff.NET不支持的方案?

由于

1 个答案:

答案 0 :(得分:0)

libtiff / LibTiff.Net绝对不支持零扫描线大小。我不知道任何其他支持扫描线长度为零的图像的观众。

Jim向我们发送了几个这样的文件,结果发现文件已损坏/损坏。它们为第一页指定零宽度。

我尝试在其他一些图像查看器中打开这些文件,只有Mac OS X Mavericks中的预览实用程序可以打开它们。该实用程序会打开这两个文件,但会静静地跳过第一个打破的页面。它显示的不是错误,并且表示文件中只有少一页。

要实现相同的目标(默默跳过第一页),您可以使用以下解决方法:

  1. 以附加模式打开TIFF
  2. 将当前页面设为第一页
  3. 在循环中检查每页的大小
  4. 跳过任何宽度或高度为零的页面
  5. 以下是变通方法的示例代码。

    // "a" is for append
    using (Tiff inImage = Tiff.Open(put-file-name-here, "a"))
    {
        if (inImage == null)
            return;
    
        // move to the first page
        inImage.SetDirectory(0);
    
        do
        {
            FieldValue[] width = inImage.GetField(TiffTag.IMAGEWIDTH);
            FieldValue[] height = inImage.GetField(TiffTag.IMAGEWIDTH);
            if (width[0].ToInt() != 0 && height[0].ToInt() != 0)
            {
                // the page appears correct, do something with it
            }
        } while (inImage.ReadDirectory());
    }