我正在尝试使用小型 C 程序读取 16 位灰度 TIFF 文件 (BitsPerSample=16) 以转换为浮点数数组以进行进一步分析。根据标题信息,像素数据位于 2048x2048 像素的单个条带中。编码是小端的。
有了这些标头信息,我期望能够读取一个 2048x2048x2 字节的块并将其解释为 2048x2048 2 字节整数。实际上,我得到的是一张图片,分为四个象限,每个象限为 1024x1024 像素,其中较低的两个仅包含零。前两个象限中的每一个看起来都像我预期的那样:alt text http://users.aber.ac.uk/ruw/unlinked/15_inRT_0p457.png
如果我将相同的文件读入 Gimp或 Imagemagick,都告诉我他们必须减少到 8 位(这对我没有帮助 - 我需要完整的范围),但像素出现在正确的位置:alt text http://users.aber。 ac.uk/ruw/unlinked/15_inRT_0p457_gimp.png
这表明我关于如何在一个条带内排列数据的想法是错误的。另一方面,文件必须根据标题信息正确格式化,否则 Gimp 将无法正确处理。我哪里错了?
tiffdump 的输出:
15_inRT_0p457.tiff:
Magic:0x4949 版本:0x2a
目录 0:偏移量 8 (0x8) 下一个 0 (0)
ImageWidth (256) LONG (4) 1<2048>
ImageLength (257) LONG (4) 1<2048 >
BitsPerSample (258) SHORT (3) 1<16>
Compression (259) SHORT (3) 1<1>
Photometric (262) SHORT (3) 1<1>
StripOffsets (273) LONG (4) 1<4096>
方向(274) SHORT (3) 1<1>
RowsPerStrip (278) LONG (4) 1<2048>
StripByteCounts (279) LONG (4) 1<8388608>
XResolution (282) RATIONAL (5) 1<126.582>
YResolution (283 ) ) RATIONAL (5) 1<126.582>
ResolutionUnit (296) SHORT (3) 1<3>
34710 (0x8796) LONG (4) 1<0>
(标签 34710 是相机信息;为了确保这不会产生任何影响,我已经将从图像文件目录末尾到 0x1000 处数据开头的整个范围归零,实际上并没有有什么不同。)