2011-08-15 12 views
10

Estoy tratando de escribir archivos TIFF RGB de 10,12 bit con LibTIFF.Escribiendo archivos TIFF de 10,12 bit con LibTIFF C++

los datos de píxeles se guarda localmente en una unsigned short tampón (16 bits)

1) Si fijo TIFFTAG_BITSPERSAMPLE a 10 o 12, no suficientes bits se leen desde la memoria intermedia, y la salida es incorrecto. (Entiendo que solo está leyendo 10 o 12 bits por componente, en lugar de 16 y este es el problema)

2) He intentado empaquetar los bits en el buffer, por lo que es realmente 12-R, 12- G, 12-B. En este caso, creo que el archivo se está escribiendo correctamente, pero ningún espectador que pude encontrar pudo mostrar esta imagen correctamente.

3) Si configuro TIFFTAG_BITSPERSAMPLE a 16, los espectadores pueden mostrar la imagen TIFF, pero entonces tengo un problema que no sé si la imagen era originalmente 10 o 12 bits (si deseo leerlo más adelante con LibTIFF). Además, el espectador espera que el rango dinámico sea de 16 bits y no de 10 o 12, lo que también da como resultado una mala vista.

4) La parte más molesta es que no pude encontrar una imagen TIFF de 10, 12 o 14 bits en la web para ver cómo se supone que debe verse el encabezado.

Así que, finalmente, ¿cuál es la forma correcta de escribir datos de imagen de 10 o 12 bits en un archivo TIFF ?????

+0

Hice la misma pregunta hace algún tiempo, no hay resultados, parece que el formato tiff no tiene esa etiqueta. Espero que esté equivocado ... –

Respuesta

8

The TIFF specification no especifica una forma de almacenar 10, 12 o 14 bits por canal en una imagen. Dependiendo del codificador y el decodificador, aún puede ser posible trabajar con tales imágenes, pero es efectivamente un detalle de implementación, ya que no están obligados a hacerlo.

Si desea más de 8 bits de precisión en un TIFF, su única opción es 16 (o coma flotante, pero esa es una historia diferente).

No conozco ningún formato de imagen con soporte específico para estos bitdepths, por lo que los espectadores probablemente sean un problema de todos modos si debe almacenar la imagen con esa profundidad de bits específica. La solución más simple que puedo pensar sería almacenar solo 16 bits por píxel y poner la profundidad de bits original como metadatos (por ejemplo, en una etiqueta ImageDescription), pero todo depende de para qué se utilizarán las imágenes y por qué necesita esta información .

+0

En realidad, también recomendaría esto como una solución, ya que las profundidades de bits exóticas no le darán nada bueno. –

+0

Usé 16 bits por muestra y codifiqué la profundidad de bits real como metadatos. Gracias – Itsik

Cuestiones relacionadas