Espacio de color RGBA
# Espacio de color RGBA

RGBA son la siglas para red green blue alpha (en español: alfa verde azul rojo). Suele describirse como un espacio de color, aunque en realidad es la combinación de un modelo de color RGB con un cuarto adicional denominado alpha channel (en español: canal alfa). El alfa indica la opacidad de cada píxel y permite que una imagen se combine con otras utilizando la composición alfa, con áreas transparentes y suavizado de bordes en las regiones opacas.

El término no define qué espacio de color RGB se está utilizando. Tampoco indica si los colores son premultiplicados o no por el valor alfa, y si lo son, no indica en qué espacio de color se realizó la multiplicación previa. Esto significa que se necesita algo más que el "RGBA" para determinar cómo manejar una imagen.

## Representación

En la computación gráfica, los píxeles que codifican la información del espacio de color RGBA deben almacenarse en la memoria de computadora (o en archivos), en formatos bien definidos. Hay varias formas de codificar los colores RGBA, lo que puede generar confusión cuando se intercambian datos de imagen. Estas codificaciones a menudo se indican mediante las cuatro letras en algún orden (por ejemplo, RGBA, ARGB, etc.). Desafortunadamente, la interpretación de estas mnemónicas de 4 letras no está bien establecida, lo que lleva a una mayor confusión. Hay dos formas típicas de entender una regla mnemotécnica como "RGBA":

* Ordenado como byte: se entiende que el RGBA significa un byte R, seguido de un byte G, seguido de un byte B y seguido de un byte A. Este esquema se usa comúnmente para describir formatos de archivo o protocolos de red que son ambos orientados a bytes.
* Ordenado como palabra: se entiende que el "RGBA" representa una palabra completa de 32 bits, donde R es más significativo que G, que es más significativo que B y que es más significativo que A. Este esquema se puede usar para describir el diseño de la memoria en un sistema en particular. Su significado varía dependiendo del big-endian del sistema.

En un sistema big-endian, los dos esquemas son equivalentes. Este no es el caso de un sistema little-endian, donde las dos mnemotécnicas son inversas entre sí. Por lo tanto, para no cometer errores, es importante indicar en qué orden se utiliza cuando se hace referencia a la codificación.

| Formato | Ordenado como byte | Ordenado como byte | Ordenado como palabra | Ordenado como palabra |
| - | - | - | - | - |
| Formato | little-endian | big-endian | little-endian | big-endian |
| RGBA (ordenado como byte) | RGBA8888 | RGBA8888 | ABGR32 | RGBA32 |
| ARGB (ordenado como palabra) | BGRA8888 | ARGB8888 | ARGB32 | ARGB32 |
| RGBA (ordenado como palabra) | ABGR8888 | RGBA8888 | RGBA32 | RGBA32 |
| ABGR (ordenado como palabra) | RGBA8888 | ABGR8888 | ABGR32 | ABGR32 |

### RGBA (ordenado como byte)

En OpenGL y en PNG, se usa el RGBA (ordenado como byte), donde los colores se almacenan en la memoria de tal manera que R está en la dirección más baja, G después, B después y A en último lugar. En una arquitectura little-endian esto es equivalente a ABGR (ordenado como palabra).

Incluso cuando hay más de 8 bits por canal (como 16 bits o coma flotante), los canales aún se almacenan en orden RGBA. En PNG, los canales se almacenan como enteros de 16 bits en big-endian.

### ARGB (ordenado como palabra)

En el ARGB (ordenado como palabra), la codificación de la intensidad de cada muestra se define mediante 8 bits (sample length) y se organizan en la memoria de tal manera que un solo entero no asignado de 32 bits tenga la muestra alfa en los 8 bits más altos, seguido por la muestra roja, la muestra verde y finalmente la muestra azul en los 8 bits más bajos:

Los valores ARGB se expresan normalmente utilizando 8 dígitos hexadecimales, y cada par de dígitos hexadecimales representa los valores del canal alfa, rojo, verde y azul, respectivamente (channel membership).

Por ejemplo, 80FFFF00 representa el 50.2% de amarillo opaco (no premultiplicado). El valor 80 hexadecimal, que es 128 en decimal, representa un valor alfa del 50.2% porque 128 es aproximadamente el 50.2% del valor máximo de 255 (hexadecimal FF); para continuar descifrando el valor 80FFFF00, el primer FF representa el valor máximo que puede tener el rojo; El segundo FF es como el anterior pero para el verde; el 00 final representa el valor mínimo que puede tener el azul (o sea, nada de azul). En consecuencia, rojo y verde produce amarillo. Los casos en los que no se usa el alfa, se puede acortar a RRGGBB de 6 dígitos, por eso se eligió para colocar el alfa en los bits superiores. Dependiendo del contexto, un 0x o el numeral se colocan antes de los dígitos hexadecimales.

En sistemas little-endian, esto es equivalente a BGRA (ordenado como bytes). En los sistemas big-endian, esto es equivalente a ARGB (ordenado como bytes).

