为什么用TiffLib.NET加载一些Tiff文件

时间:2015-01-15 17:26:18

标签: c# tiff libtiff libtiff.net

我在使用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;
            }

        }

谢谢!

1 个答案:

答案 0 :(得分:0)

如果没有文件来重现这个问题,我可以百分百肯定,但看起来你的文件在LibTiff.Net的帮助下无法转换为RGBA栅格。

这不是错误,只是你正在使用一些不太受欢迎的TIFF风格。有人说TIFF是一千种不兼容的文件格式。这句话当然有一些道理。

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

不要忘记,并不是每个图像都可以转换为RGBA而不会丢失一些图像数据。