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