我正在尝试通过 C 语言处理每通道 16 位 RGBA TIFF 图像,我在规范中找不到很多关于 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.