使用 LibTiff - C# 读取像素的 RGB 值
Reading RGB values of a pixel with LibTiff - C#
我想在 C# 中读取像素的 RGB 值,我尝试使用找到的以下代码 here。
int[] raster = new int[height*width];
var b = tiffreader.ReadRGBAImage(width, height, raster);
for (int i = 0; i < width; ++i)
for (int j = 0; j < height; ++j)
{
int offset = (height - j - 1) * width + i;
color.R = Tiff.GetR(raster[offset]);
color.G = Tiff.GetG(raster[offset]);
color.B = Tiff.GetB(raster[offset]);
}
但我不知道这个偏移是什么以及为什么当图像是二维时光栅是一维的。有人可以帮助我理解上面代码中的偏移和光栅内容吗?
二维字节数组(在本例中为位图)基本上仍然是一个 "normal" 一维数组,为方便起见,允许通过两个单独的索引进行访问。
示例:
0123456789
0 ##########
1 **********
2 XXXXXXXXXX
3 YYYYYYYYYY
#,*,X,Y
表示每个条目中的字节数
实际上是(在内存中)
##########**********XXXXXXXXXXYYYYYYYYYY
所以映射索引的公式是
int offset = i * width + j
其中 i
是行,j
是列索引。
对于这张 TIFF 图像,情况略有不同,因为假定原点位于左下角:
0123456789
3 ####OO####
2 ##OO##OO##
1 ##OOOOOO##
0 ##OO##OO##
因此,
int offset = (height - j - 1) * width + i;
是将两个二维索引映射到栅格数组的一维索引的公式。
我想在 C# 中读取像素的 RGB 值,我尝试使用找到的以下代码 here。
int[] raster = new int[height*width];
var b = tiffreader.ReadRGBAImage(width, height, raster);
for (int i = 0; i < width; ++i)
for (int j = 0; j < height; ++j)
{
int offset = (height - j - 1) * width + i;
color.R = Tiff.GetR(raster[offset]);
color.G = Tiff.GetG(raster[offset]);
color.B = Tiff.GetB(raster[offset]);
}
但我不知道这个偏移是什么以及为什么当图像是二维时光栅是一维的。有人可以帮助我理解上面代码中的偏移和光栅内容吗?
二维字节数组(在本例中为位图)基本上仍然是一个 "normal" 一维数组,为方便起见,允许通过两个单独的索引进行访问。
示例:
0123456789
0 ##########
1 **********
2 XXXXXXXXXX
3 YYYYYYYYYY
#,*,X,Y
表示每个条目中的字节数
实际上是(在内存中)
##########**********XXXXXXXXXXYYYYYYYYYY
所以映射索引的公式是
int offset = i * width + j
其中 i
是行,j
是列索引。
对于这张 TIFF 图像,情况略有不同,因为假定原点位于左下角:
0123456789
3 ####OO####
2 ##OO##OO##
1 ##OOOOOO##
0 ##OO##OO##
因此,
int offset = (height - j - 1) * width + i;
是将两个二维索引映射到栅格数组的一维索引的公式。