编程语言
首页 > 编程语言> > 使用LibTiff读取像素的RGB值-C#

使用LibTiff读取像素的RGB值-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]);
             }

但是我不知道这是什么偏移量,以及当Image为2D时为什么栅格在1D中.可以帮助我理解上面代码中的偏移量和栅格内容.

解决方法:

2D字节数组(在本例中为位图)基本上仍然是“常规” 1D数组,为方便起见,允许使用两个单独的索引进行访问.

例:

  0123456789
0 ##########
1 **********
2 XXXXXXXXXX
3 YYYYYYYYYY

#,*,X,Y表示每个条目中的字节

实际上(在内存中)

##########**********XXXXXXXXXXYYYYYYYYYY

因此映射索引的公式是

int offset = i * width + j

我是行,而j是列索引.

在此TIFF图像的情况下,这有点不同,因为假定原点位于左下角:

  0123456789
3 ####OO####
2 ##OO##OO##
1 ##OOOOOO##
0 ##OO##OO##

从而,

int offset = (height - j - 1) * width + i;

是将两个2D索引映射到栅格阵列的1D索引的公式.

标签:libtiff,geotiff,libtiff-net,c,rgbcolor
来源: https://codeday.me/bug/20191118/2025597.html