Profundidad de color
# Profundidad de color

La profundidad de color o bits por píxel (bpp) es un concepto de la computación gráfica que se refiere a la cantidad de bits de información necesarios para representar el color de cada píxel en una imagen digital o en un framebuffer. Debido a la naturaleza del sistema binario de numeración, una profundidad de bits de n implica que cada píxel de la imagen puede tener $2^n$ posibles valores y por lo tanto, representar $2^n$ colores distintos.

Debido a la aceptación prácticamente universal de los octetos de 8 bits como unidades básicas de información en los dispositivos de almacenamiento, los valores de profundidad de color suelen ser divisores o múltiplos de 8, a saber 1, 2, 4, 8, 16, 24 y 32, con la excepción de la profundidad de color de 10 o 15, usada por ciertos dispositivos gráficos.

## Color indexado

Para las profundidades de color inferiores o iguales a 8, los valores de los píxeles hacen referencia a tonos RGB indexados en una tabla, llamada habitualmente caja creadora de colorización o paleta. Los tonos en dicha tabla pueden ser definidos por convención o bien ser configurables, en función de la aplicación que la defina. A continuación se mencionarán algunas profundidades de color en la gama baja, así como la cantidad de tonos que pueden representar en cada pixel y el nombre que se le otorga a las imágenes o framebuffers que los soportan.

* 1 bit por píxel: $2^1$ = 2 colores, también llamado monocromo o blanco y negro o B/W. Compatible IBM PC con MDA o HGC, primeros Macintosh, Atari ST en alta resolución
* 2 bits por píxel: $2^2$ = 4 colores, o CGA
* 3 bits por píxel: $2^3$ = 8 colores: primeros modelos de ordenador doméstico como el ZX Spectrum y el BBC Micro
* 4 bits por píxel: $2^4$ = 16 colores, la cual es la mínima profundidad aceptada por el estándar EGA. Macintosh en color, Atari ST, Commodore 64, Amstrad CPC, MSX2.
* 5 bits por píxel: $2^5$ = 32 colores, como en el chipset original del Commodore Amiga
* 6 bits por píxel: $2^6$ = 64 colores, como en el chipset original del Commodore Amiga
* 8 bits por píxel: $2^8$ = 256 colores, también llamado VGA. Super VGA, Macintosh color, Atari TT, Commodore Amiga con chipset AGA, Atari Falcon030, MSX2.
* 9 bits por píxel: $2^9$ = 512 colores, también llamado Ultra VGA.
* 10 bits por pixel: $2^{10}$ = 1024 colores, usado en UHDTV.
* 12 bits por pixel: $2^{12}$ = 4096 colores, algunos modelos de Silicon Graphics, NeXTstation en color, modo HAM del Commodore Amiga.
* 16 bits por pixel: $2^{16}$ = 65536 colores, algunos modelos de Silicon Graphics, etc.-
* 1 bit (2 colores) con dithering
* 2 bits (4 colores)
* 4 bits (16 colores)
* 8 bits (256 colores)
* 24 bits (16777216 colores)

Por ejemplo, los archivos de extensión .GIF utilizan la paleta de color indexado hasta de 8 bits, mientras que en una imagen tomada con cámara digital convencional el color es de 24 bits (24 bits por canal de color RGB).

Los primeros chips gráficos solían utilizar trucos para aumentar la capacidad de color sin por ello consumir más de la entonces cara memoria RAM. Quizá el más conocido es el utilizado por el ZX Spectrum, que almacena la imagen en dos bits, pero el color se define para bloques de 8x8 píxels.

## Color directo

Cuando los valores de la profundidad de colores aumentan, se torna impráctico mantener una tabla o mapa de colores debido a la progresión exponencial de la cantidad de valores que el pixel puede tomar. En esos casos se prefiere codificar dentro de cada pixel los tres valores de intensidad luminosa que definen un color cualquiera en el modelo de color RGB.

### Color de alta resolución o HiColor

Los valores de profundidad de color de 15 y 16 bits son llamados habitualmente color de alta resolución o HiColor.

* En la profundidad de 15 bpp se utilizan 5 bits para codificar la intensidad del rojo, 5 para el verde y los otros 5 para el azul. Con una profundidad de 15 bpp es posible representar $32\times 32\times 32=32768$ colores en cada pixel.
* En la profundidad de 16 bpp se utilizan 5 bits para codificar la intensidad del rojo, 6 para el verde y los otros 5 para el azul. La razón de esto es que experimentalmente se sabe que el ojo humano es más sensible al color verde, y que puede discriminar más tonos que varía ligeramente en la intensidad verde. Con la profundidad de 16 bpp es posible representar $32\times 64\times 32=65536$ colores en cada pixel. El tamaño de la imagen dependerá de la profundidad en bits de sus píxeles, además de su cantidad.

### Color real o True Color

Para la profundidad de color de 24 bits por pixel, se habla de color verdadero debido a que la policromía se acerca a lo que el ojo humano puede encontrar en el mundo real, y a que dicho ojo humano se torna incapaz de diferenciar entre un tono y otro, si la diferencia se mantiene en un cierto rango mínimo. En la profundidad de color de 24 bits por pixel, se dedica un octeto entero a representar la intensidad luminosa de cada uno de los tres tonos primarios de rojo, verde y azul, lo cual permite que cada pixel pueda tomar $2^{24}$ = 256x256x256 = 16.777.216 colores distintos.

Cuando se utilizan 32 bits para representar un color se agrega al esquema de 256 valores para cada tono primario un cuarto canal denominado alfa que representa la transparencia. Este valor se utiliza cuando se deben superponer dos imágenes.

Edwin Catmull propuso una serie de operadores para la mezcla (también llamado blend) de imágenes. Debido a que Catmull estaba desarrollando el sistema de animación de Pixar necesitaba automatizar la composición de imágenes. Juntamente con Marc Levoy (Levoy los desarrolló por su cuenta en los estudios Hanna Barbera) sentaron las bases del álgebra de colores. El operador más común es el OVER, que presentamos a continuación:

Dados los colores A [r1, g1, b1, a1] y B [r2, g2, b2, a2], el resultado de mezclar: A sobre B es:

A OVER B = [ r1 * a1 + r2(1 - a1), g1 * a1 + g2(1 - a1), b1 * a1 + b2(1 - a1) ]

Notemos que el orden es importante: A sobre B es diferente que B sobre A. Esta es la razón por la cual la transparencia se debe aplicar en orden. Por ejemplo si tenemos tres imágenes A, B y C, donde C es el fondo y A es la imagen al frente, el orden es el siguiente: Imagen Final = A over ( B over C ) Existen otros operadores importantes como el OUT, ADD, SUB y otras formulaciones de OVER más complejas.

