使用LibTIFF C++编写10,12位TIFF文件

Its*_*sik 12 c++ tiff libtiff

我正在尝试用LibTIFF写入10,12位RGB TIFF文件.

像素数据本地保存在unsigned short缓冲区(16位)

1)如果设置TIFFTAG_BITSPERSAMPLE为10或12,则从缓冲区中读取的位数不足,输出不正确.(我知道它只是读取每个组件10或12位,而不是16,这是问题)

2)我尝试将缓冲区中的位打包,因此它实际上是12-R,12-G,12-B.在这种情况下,我认为文件正确写入,但我找不到的查看器可以正确显示此图像.

3)如果我设置TIFFTAG_BITSPERSAMPLE为16,观众可以显示TIFF图像,但是我有一个问题,我不知道图像最初是10位还是12位(如果我想稍后用LibTIFF读取它).此外,观众期望动态范围是16位而不是10或12,也导致视图不良.

4)最烦人的部分是我在网上找不到10,12或14位TIFF图像,看看标题应该是什么样子.

最后,将10或12位图像数据写入TIFF文件的正确方法是什么?

Mic*_*sen 10

TIFF规范未指定在图像中每个通道存储10,12或14位的方法.根据编码器和解码器,仍然可以使用这些图像,但它实际上是一个实现细节,因为它们不需要这样做.

如果你想要一个TIFF超过8位的精度,你唯一的选择是16(或浮点,但这是一个不同的故事).

我不知道任何具有这些bitdepth特定支持的图像格式,因此如果你必须使用特定的bitdepth存储图像,观众可能会成为一个问题.我能想到的最简单的解决方法是将每个像素存储为16位并将原始bitdepth作为元数据(例如,在ImageDescription标记中),但这一切都取决于图像的用途以及为什么需要此信息.

  • 我想指出 TIFF 标签 MAXSAMPLEVALUE 和 MINSAMPLEVALUE,它们可以设置(至少使用 tifflib)并给出由某些查看器(例如 ImageJ)解释的一系列可能值。 (3认同)