2011-08-15 8 views
10

10,12ビットのRGB TIFFファイルをLibTIFFで書き込もうとしています。私は10または12にTIFFTAG_BITSPERSAMPLEを設定した場合の画素データがunsigned shortバッファ(16ビット)10,12ビットのTIFFファイルをLibTIFF C++で書く

1)にローカルに保存され

、十分ではないビットがバッファから読み出されており、出力が正しくありません。 (私はちょうど16の代わりに10または12ビットを読み取っていることを理解し、これは問題です)

2)私は実際には12-R、 G、12-B。この場合、ファイルが正しく書かれていると思いますが、私が見つけたビューアはこの画像を正しく表示できませんでした。

3)TIFFTAG_BITSPERSAMPLEを16に設定すると、視聴者はTIFF画像を表示できますが、画像がもともと10ビットか12ビットだったかどうかわかりません(後で読むLibTIFF)。また、視聴者は、ダイナミックレンジが10または12ではなく16ビットであることを期待しており、結果としてビューが悪くなります。

4)最も厄介な部分は、ウェブ上で1つの10,12、または14ビットのTIFF画像が見つからず、ヘッダーの外観を確認できなかったことです。

最後に、10ビットまたは12ビットのイメージデータをTIFFファイルに書き込む適切な方法は?

+0

私は以前同じ質問をしましたが、結果はありません.tiff形式のようなタグはありません。私は間違っていることを願っています... –

答えて

8

The TIFF specificationは、画像にチャンネルごとに10,12、または14ビットを格納する方法を指定していません。エンコーダとデコーダによっては、そのような画像を扱うことはまだ可能ですが、実際にはこれを行う必要はないため、実装の詳細です。

TIFFで8ビット以上の精度が必要な場合は、唯一の選択肢は16(浮動小数点数ですが、それは別の話です)です。

これらのビット深度に特定のサポートを持つ画像フォーマットは認識していないため、特定のビット深度で画像を保存する必要がある場合、視聴者に問題が発生する可能性があります。私が考えることができる最も単純な回避策は、ピクセルあたり16ビットとして保存し、元のビット深度をメタデータ(たとえばImageDescriptionタグ)にすることですが、画像がどのように使用されるのか、なぜこの情報が必要なのかによって異なります。

+0

実際に私は、エキゾチックなビット深度があなたに良いものを与えないので、実際には解決策としてこれをお勧めします。 –

+0

サンプルあたり16ビットを使用し、実際のビット深度をメタデータとしてエンコードしました。ありがとう – Itsik

関連する問題