2011-08-15 4 views
10

10,12 비트 RGB TIFF 파일을 LibTIFF로 쓰려고합니다. I가 10 또는 12 TIFFTAG_BITSPERSAMPLE 설정하면LibTIFF C++로 10,12 비트 TIFF 파일 작성

화소 데이터가 unsigned short 버퍼 (16 비트)에 로컬로 저장

1), 충분하지 않은 비트는 버퍼로부터 판독되고, 출력이 잘못. (나는 그것이 단지 16 개 대신에 컴포넌트 당 10 비트 또는 12 비트를 읽는다는 것을 이해한다.)

2) 버퍼에 비트를 패킹하여 실제로 12-R, 12- G, 12-B. 이 경우 파일이 제대로 쓰여지고 있지만 뷰어를 찾지 못하면이 이미지가 제대로 표시 될 수 있습니다.

3) TIFFTAG_BITSPERSAMPLE을 16으로 설정하면 시청자가 TIFF 이미지를 표시 할 수 있지만 이미지가 원래 10 비트인지 12 비트인지는 알 수없는 문제가 있습니다 (나중에 읽으려는 경우 LibTIFF). 또한 시청자는 동적 범위가 10 또는 12가 아닌 16 비트가 될 것으로 예상하여 나쁜보기를 만듭니다.

4) 가장 귀찮은 부분은 웹에서 10, 12 또는 14 비트 TIFF 이미지를 찾지 못해 헤더가 어떻게 보이는지 알 수 없기 때문입니다.

그래서 마지막으로 10 비트 또는 12 비트 이미지 데이터를 TIFF 파일에 쓰는 적절한 방법은 무엇입니까 ?????

+0

나는 같은 질문을 몇 시간 전에 물었고 아무런 결과도없이 tiff 형식에는 그런 태그가 없다. 나는 내가 틀렸다고 희망한다. –

답변

8

The TIFF specification은 이미지에 채널 당 10, 12 또는 14 비트를 저장하는 방법을 지정하지 않습니다. 인코더와 디코더에 따라서는 이러한 이미지로 작업하는 것이 가능할 수도 있지만 실제로 그렇게 할 필요가 없으므로 구현 세부 사항입니다.

TIFF에서 8 비트 이상의 정밀도를 원한다면 유일한 선택은 16 (또는 부동 소수점이지만 다른 이야기입니다.)입니다.

이러한 비트 심도를 특정 지원하는 이미지 형식을 인식하지 못하기 때문에 특정 비트 심도로 이미지를 저장해야하는 경우 시청자가 문제가 될 수 있습니다. 내가 생각할 수있는 가장 간단한 해결 방법은 픽셀 당 16 비트로 저장하고 원래 비트 깊이를 메타 데이터 (예 : ImageDescription 태그)로 저장하는 것이지만 이미지가 사용될 대상과이 정보가 필요한 이유에 따라 다릅니다 .

+0

사실 나는 이것을 해법으로 추천한다. 이국적인 비트 깊이는 당신에게 아무 것도주지 않을 것이기 때문이다. –

+0

샘플 당 16 비트를 사용했으며 메타 데이터로 실제 비트 심도를 인코딩했습니다. 감사 – Itsik

관련 문제