使用libtiff.NET在C#中读取TIFF图像

时间:2017-08-10 11:44:30

标签: c# libtiff.net

我有一个16位灰度tiff图像,我需要在C#中读取。为此,我使用libtiff.NET库。我试着按照official tutorials来演示如何阅读彩色图像。但是,教程中的代码失败了ObjectDisposedException,我想因为我的图像是灰度而没有着色。

我最终需要的是一个简单的二维数组,其中包含每个像素的像素值(范围从0到511)。为了解决这个例外,我尝试了libtiff基于扫描线的方法:

// read the height data
float[,] heightData = new float[dgm.NumberOfPixelsInX, dgm.NumberOfPixelsInZ];

// Read the image into the memory buffer 
int scanlineSize = dgm.ImageData.ScanlineSize();
byte[][] buffer = new byte[dgm.NumberOfPixelsInZ][];

for (int i = 0; i < dgm.NumberOfPixelsInZ; i++)
{
    buffer[i] = new byte[scanlineSize];
    dgm.ImageData.ReadScanline(buffer[i], i);
}

for (int x = 0; x < dgm.NumberOfPixelsInX; x++)
{
    for (int y = 0; y < dgm.NumberOfPixelsInZ; y++)
    {
        heightData[x, y] = BitConverter.ToSingle(putBufferHere, 0);
    }
}

我知道putBufferHere需要像buffer[y],但我不完全确定。据我所知,缓冲区数组中的一行包含整行的数据,那么如何获取一个特定像素的数据呢?

0 个答案:

没有答案