2011-08-15 9 views
10

Próbuję napisać 10,12 bit RGB plików TIFF z libtiff.Pisanie 10,12 plików bit TIFF z libtiff C++

Dane pikseli są zapisywane lokalnie w buforze unsigned short (16bits)

1) Jeżeli ustawić TIFFTAG_BITSPERSAMPLE do 10 lub 12, nie ma wystarczającej liczby bitów są odczytywane z bufora, a wyjście jest nieprawidłowe. (Rozumiem, że jest to po prostu odczyt 10 lub 12 bitów na komponent, zamiast 16 i to jest problem)

2) Próbowałem upakować bity w buforze, tak aby było naprawdę 12-R, 12- G, 12-B. W tym przypadku, myślę, że plik jest zapisywany poprawnie, ale żaden widz nie mógł znaleźć może poprawnie wyświetlić ten obraz.

3) Jeśli ustawię TIFFTAG_BITSPERSAMPLE na 16, widzowie mogą wyświetlać obraz TIFF, ale wtedy mam problem, że nie wiem, czy obraz był pierwotnie 10 lub 12 bitów (Jeśli chcę później przeczytać go z LibTIFF). Ponadto przeglądarka oczekuje, że zakres dynamiczny będzie wynosił 16 bitów, a nie 10 lub 12, co również daje zły widok.

4) Najbardziej irytujące jest to, że nie mogłem znaleźć jeden 10, 12, lub 14-bitowy TIFF w internecie, aby zobaczyć, co nagłówek powinien wyglądać.

więc ostatecznie, jaka jest właściwa droga do napisania 10 lub 12 bitowe dane do pliku TIFF ?????

+0

Zadałem to samo pytanie jakiś czas temu, brak wyników, wygląda na to, że format tiff nie ma takiego znacznika. Mam nadzieję, że się mylę ... –

Odpowiedz

8

The TIFF specification nie podaje sposób magazynowania 10, 12 lub 14 bitów w każdym kanale w obrazie. W zależności od kodera i dekodera nadal możliwa jest praca z takimi obrazami, ale jest to w rzeczywistości szczegół implementacji, ponieważ nie jest to wymagane.

Jeśli chcesz więcej niż 8 bitów precyzji w formacie TIFF, jedynym wyborem jest 16 (lub zmiennoprzecinkowe, ale to inna historia).

Nie jestem świadomy żadnego formatu obrazu ze specjalnym wsparciem dla tych bitdepthów, więc widzowie i tak będą prawdopodobnie problemem, jeśli musisz przechowywać obraz o tej konkretnej bitdepth. Najprostszym sposobem obejścia tego problemu jest zapisanie 16 bitów na piksel i umieszczenie oryginalnej bitdepth jako metadanych (np. W tagu ImageDescription), ale wszystko zależy od tego, do czego obrazy będą używane i dlaczego potrzebujesz tych informacji .

+0

Właściwie to polecam to jako rozwiązanie, ponieważ egzotyczne głębie bitew nie przyniosą niczego dobrego. –

+0

kiedyś 16 bitów na próbki i zakodowane są w Głębia bitowa jak metadane. Dzięki – Itsik