Написание 10,12 бит TIFF файлов с LibTIFF C++

Я пытаюсь написать 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 (или с плавающей запятой, но это другая история).

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