Запись 10,12-битных файлов TIFF с помощью LibTIFF С++

Я пытаюсь записать 10,12-битные файлы RGB TIFF с помощью LibTIFF.

Данные пикселей сохраняются локально в буфере 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?

Ответ 1

Спецификация TIFF не указывает способ хранения 10, 12 или 14 бит на канал в изображении. В зависимости от кодировщика и декодера все еще возможно работать с такими изображениями, но это фактически деталь реализации, поскольку они не обязаны это делать.

Если вы хотите более 8 бит точности в TIFF, ваш единственный выбор - 16 (или плавающая точка, но это другая история).

Я не знаю какого-либо формата изображения с конкретной поддержкой этих битдептов, поэтому зрители, вероятно, будут проблемой в любом случае, если вы должны сохранить изображение с этим конкретным битдептом. Простейшим обходным решением, о котором я могу думать, было бы просто сохранить 16 бит на пиксель и поместить исходный битдип в метаданные (например, в тег ImageDescription), но все зависит от того, для чего будут использоваться изображения и почему вам нужна эта информация.