【发布时间】:2017-06-07 20:11:46
【问题描述】:
我正在编写需要读取 4 通道 geotiff 图像的代码,在本例中是 16 位图像(数据实际上是 12 位分辨率,但以 16 位编码)。
我的主要目标是读取像素值以供以后使用。 从这个问题"How 16bits-RGBA image pixels are interlaced?" 我尝试像这样使用 TIFFReadEncodedStrip 而不是 TIFFRGBAImage:
buf = (unsigned char*)(_TIFFmalloc(TIFFStripSize(tif)));
TIFFReadEncodedStrip(tif,strip,buf,(tsize_t)-1);
uint32 *p0 = buf;
printf("strip %d = %d \n", strip, *p0);
对于我打印的 p0 值,它应该是实际的图像数据,我得到了这个:
strip 0 = 20382000
检查我发现的图像中的标签:
Rows per strip: 1
Samples per pixel: 4
Bits per sample: 16
Image orientation: 1 (bottom left)
Size of buffer: 8 bytes
所以我的假设是我从缓冲区获得的 p0 值是图像第一个通道左上角的前四个像素。 我不明白的是我必须如何解释我得到的 p0 条的值。
在 matlab 中打开图像并检查每个通道中的第一个像素(左上角),我得到了 304、311、314 和 314,这似乎与我得到的 p0 值无关。
我不知道是因为 12 位分辨率,还是我必须将其转换为 uint32 以外的类型,但我就是无法理解这个数字。
谁能帮忙破译这个数字,如果它对应于左下角的前四个像素?
【问题讨论】: