【问题标题】:Why won't some Tiff files load with TiffLib.NET为什么某些 Tiff 文件无法使用 TiffLib.NET 加载
【发布时间】:2015-01-15 17:26:18
【问题描述】:

我在 C# 中加载 Tiff 文件时遇到问题。我下载了一些示例 tiff 文件并且能够很好地加载它们,但是当我尝试加载从 PCI Geomatica 或 ArcGIS 生成的任何 tiff 文件时,ReadRGBAImage 调用失败(返回 false)。除了 IMAGEWIDTH 和 IMAGELENGTH,我尝试检索的所有其他标签都返回了 null(例如 XRESOLUTION)。有没有人知道为什么会这样?相关代码如下:

using (Tiff tif = Tiff.Open(fileName, "r"))
        {
            // Find the width and height of the image
            FieldValue[] value = tif.GetField(TiffTag.IMAGEWIDTH);
            int width = value[0].ToInt();

            value = tif.GetField(TiffTag.IMAGELENGTH);
            int height = value[0].ToInt();

            // Read the image into the memory buffer
            int[] raster = new int[height * width];

            if (!tif.ReadRGBAImage(width, height, raster))
            {
                System.Windows.Forms.MessageBox.Show("Could not read image");
                return null;
            }

        }

谢谢!

【问题讨论】:

  • 我自己没有使用过 libtiff.net,但文件是否有可能被布置为条带而不是 RGBA 像素?这在 GIS 图像类型中很常见。我看到 Tiff 类有一个 ReadRGBAStrip 方法...(此外,平铺对于 GIS 图像格式很常见。)
  • 谢谢,adv12。这听起来像是一个很有希望的答案。我会尝试并报告。
  • 我能够使用 ReadRGBAStrip 成功加载一条 tiff。再次感谢您的回答,您可能已经为我省了很多用头撞墙的麻烦! PS。我是这个网站的新手,不能 100% 确定它是如何工作的,但是如果您想将此作为答案提交,我可以将其标记为正确答案。 (这会给你一些声望点什么的?)
  • 优秀。很高兴能提供帮助。
  • 另一个常见的 TIFF 陷阱是字节序。确保您的 lib 正确打开在 MacOS 上创建的 TIFF 文件。

标签: c# tiff libtiff libtiff.net


【解决方案1】:

如果没有文件来重现问题,我可以 100% 确定,但看起来您的文件无法在 LibTiff.Net 的帮助下转换为 RGBA 光栅。

这不是错误,只是您使用了一些不太流行的 TIFF 风格。有人说 TIFF 是一千种不兼容的文件格式。这句话肯定有一些道理。

库可以读取(和解码!)您的文件。您可以使用 ReadEncodedStrip 和/或 ReadScanline 方法获取解码的栅格。将栅格转换为 RGBA 的任务由您完成。

并且不要忘记,并非每张图像都可以在不丢失一些图像数据的情况下转换为 RGBA。

【讨论】:

  • 我认为你是对的。我已经放弃尝试加载这些程序生成的 tiff 文件,现在只处理简单的 ascii 文件。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2011-12-09
  • 2013-05-19
  • 2021-08-26
相关资源
最近更新 更多