1

我正在阅读一个报告零扫描线大小的特定 TIF 文件。读取操作返回 null。

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

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

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

谢谢

4

1 回答 1

0

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

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

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

为了达到同样的效果(静默跳过第一页),您可以使用以下解决方法:

  1. 以附加模式打开 TIFF
  2. 将当前页面设置为第一页
  3. 在循环中检查每个页面的大小
  4. 跳过宽度或高度为零的任何页面

下面是解决方法的示例代码。

// "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());
}
于 2014-08-05T16:03:39.283 回答