チャンネルごとに 16 ビットの RGBA TIFF 画像を C 言語で処理しようとしていますが、仕様で 16 ビット画像に関する多くの情報を見つけることができませんでした。
チャンネルあたり 8 ビットの RGBA 画像の場合、ピクセルは uint32 として格納され、32 ビットを 8 ビットの 4 つのグループ (R、G、B、A) にグループ化することでインターレース解除できることを理解しています。次に、チャネルごとに 8 ビットの RGBA 画像を処理するために、次のことを行っています (ここに同封のソース コードも参照してください)。
- 画像データを uint32 タブ (TIFFReadRGBAImageOriented を使用) として保存します。
data_tiff
- 次のコマンドを使用してピクセルのインターレースを解除します:
(uint8) TIFFGetR(*data_tiff)
、(uint8) TIFFGetG(*data_tiff)
、(uint8) TIFFGetB(*data_tiff)
&(uint8) TIFFGetA(*data_tiff)
チャンネルあたり 16 ビットの RGBA 画像の場合、ピクセルのインターレースを解除する方法を教えてください。画像データを uint64 タブとして取得できれば、次のことができます。
#define TIFF16GetR(abgr) ((abgr) & 0xffff)
#define TIFF16GetG(abgr) (((abgr) >> 16) & 0xffff)
#define TIFF16GetB(abgr) (((abgr) >> 32) & 0xffff)
#define TIFF16GetA(abgr) (((abgr) >> 48) & 0xffff)`
- 画像データを uint64 タブとして読み込みます
(uint16) TIFF16GetR(*data_tiff)
、(uint16) TIFF16GetG(*data_tiff)
、(uint16) TIFF16GetB(*data_tiff)
&を使用してピクセルをインターレース解除します(uint16) TIFF16GetA(*data_tiff)
しかし、データはuint64タブにネイティブに保存されていないように見えるので、チャンネルごとに16ビットの画像をどのようにuint32ピクセルタブにインターレースするのだろうか.
また、16ビットのグレースケール画像を同じ方法で処理するのも困難です(TIFFReadRGBAImageOriented
画像データを取得し、各ピクセルをuint16に変換しようとしています)
より一般的に言えば、16 ビットのグレースケールおよびカラー画像に関するドキュメントはありますか?
よろしくお願いいたします。
レミー A.