小さな C プログラムを使用して 16 ビット グレースケール TIFF ファイル (BitsPerSample=16) を読み込んで、さらに分析するために浮動小数点数の配列に変換しようとしています。ピクセル データは、ヘッダー情報によると、2048x2048 ピクセルの 1 つのストリップにあります。エンコーディングはリトルエンディアンです。
そのヘッダー情報を使用して、2048x2048x2 バイトの単一ブロックを読み取り、それを 2048x2048 の 2 バイト整数として解釈できると期待していました。私が実際に得たのは、それぞれ 1024x1024 ピクセルの4 つの象限に分割された画像で、下の 2 つにはゼロしか含まれていません。上部の 2 つの象限はそれぞれ、全体像が見えると予想していたように見えます: alt テキスト 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
これは、データが 1 つのストリップ内でどのように配置されているかについての私の考えが間違っていることを示唆しています。一方、ファイルはヘッダー情報に関して正しくフォーマットされている必要があります。そうしないと、Gimp が正しく取得できません。どこが間違っていますか?
tiffdump からの出力:
15_inRT_0p457.tiff:
マジック: 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>
Orientation (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 のデータの先頭までの範囲全体をゼロにしましたが、実際にはそうではありません。違います。)