我有一个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]
,但我不完全确定。据我所知,缓冲区数组中的一行包含整行的数据,那么如何获取一个特定像素的数据呢?