sábado, 30 de abril de 2011

Guión para convertir de RGB888 (24 bits) a RGB444 (12 bits)

Segúramente conozcas la función de GIMP que permite convertir la imagen en indexado (paletas de hasta 256 colores).

Muchas pantallas LCD de dispositivos portátiles (como teléfonos móviles) no permiten mostrar colores de 24 bits (RGB 888 unos 16 millones de colores diferentes) como en las pantallas normales, sino que van limitados en cuanto a número de colores, a menudo 12 bits (admiten 16 variaciones de rojo, de verde y de azul, en total unos cuatro mil colores). Este proceso no lo puede realizar GIMP de forma directa, como la conversión a indexado.

Hay que destacar que el formato RGB444 es totalmente difernete del indexado. El formato indexado trabaja con referencias, lleva una lista (índice) de colores, y en la imagen solo hay referencias a esa lista. Para mostrar esas imágenes en pantalla, se lee la imagen y en la pantalla se dibujan los colores que son indicados en esa lista. En los formatos RGB888 y RGB444, no hay lista de colores, y el contenido de la imagen son los propios colores, que se dibujan de forma directa en la pantalla.

Si en esas pantallas se muestra una imagen tal cual, sin tratar, los colores quedarán truncados, de forma similar a la función posterizar de GIMP. La forma de evitar esto es relatívamente simple: tratar previamente la imagen para que tenga solo los colores que la pantalla muestra, y además, usar esos colores de forma que se mezclen y creen la apariencia de un color real de 24 bits. Más o menos como la conversión a indexado de GIMP, que la opción de difuminado del color "ninguno" funciona mal en fotos reales porque trunca los colores, en cambio las otras opciones los truncan y los difuminan, de forma que el truncamiento se nota menos.

Este formado te 12 bits se llama RGB444, ya que cada canal se lleva 4 bits, es decir, admite 16 intensidades diferentes, entre todos los canales se admitiría 16×16×16=4096 colores. Si la información admite transparencia se le llama ARGB 4444, ya que son cuatro canales.



Recientemente se ha publicado en el registro de gimp un guión que permite convertir a ARGB4444 en uno o dos clics de ratón (uno para aplanar la imagen y otro para convertir). Si tienes que trabajar con una pantalla de estas puedes este guión te podría venir muy bien para hacer conversiones.

No hay mucho más que decir, salvo dejar unos ejemplos y enlaces para comparar entre RGB888 (imagen original), el formato RGB444 que podría producirse si se trunca el color y el formato RGB444 que produce este guión.
http://en.wikipedia.org/wiki/List_of_monochrome_and_RGB_palettes#24-bit_RGB

Imagen original:


Esto es lo que pasa si se truncan los colores sin más, observa los colores sólidos del asfato o el cielo.


Y así queda si se difumina el color un poco:

Finalmente una ampliación para comparar diréctamente:

Se puede ver que el resultado de este guión es visualmente mucho mejor.

4 comentarios:

rombo dijo...

Muy bueno el post,queria saber si conoces algun programa para convertir imagenes a estos formatos RGBA4444, RGB565, RGBA8888

ZuperTruko dijo...

No se ahora mismo, puedo intentar buscar algo. También puedes intentar modificar el guión original tu mismo o bien mirar si ya está hecho.

Necesitarías dos paletas nuevas en el segundo caso (RGB565), una con 64 escalas de gris y otra con 32, y retocar el guión para que use la primera (64) en el verde y la otra (32) en el azul y el rojo.

También puedes sugerirlo al autor del guión original.

RGBA8888 es el formato de GIMP nativo, si te fijas, GIMP trabaja con 8 bits por píxel (millones de colores). RGBA4444 es el mismo que RGB444, pero con canal alfa, con imágenes sin semitransparencias puede servirte este mismo guión, pero guardando con canal alfa (pulsa en añadir canal alfa, en el diálogo de capas), si tiene semitransparencias, entonces necesitarías modificarlo.

Ailén dijo...

Adoro tu blog!!Espero que sigas escribiendo, eres muy bueno. Los temas que no comprendo de otras páginas, los encuentro bien explicados aquí. ¡ERES MI FAN Nro 1! Jaja, besos! Esperaré que no abandones tu blog y sigas con tu trabajo...

Geo dijo...

hola zupertruco me interesa aprender sobre svg y codigo c,implementando estructuras de datos, vi que tu hiciste un "hola mundo" me podrias ayudar con algunas dudas que tengo sobre svg? mi correo es satchsatriani@hotmail.com realmente necesito la ayuda contactame porfavor