Este artículo tiene varios problemas. Ayúdenos a mejorarlo o a discutir estos problemas en la página de discusión . ( Aprenda cómo y cuándo eliminar estos mensajes )
|
RGBA significa rojo, verde, azul alfa . Si bien a veces se lo describe como un espacio de color , en realidad es un modelo de color RGB de tres canales complementado con un cuarto canal alfa . Alfa indica cuán opaco es cada píxel y permite combinar una imagen con otras mediante composición alfa , con áreas transparentes y suavizado de bordes de regiones opacas. Cada píxel es un vector 4D .
El término no define qué espacio de color RGB se está utilizando. Tampoco indica si los colores se premultiplican por el valor alfa y, en caso afirmativo, no indica en qué espacio de color se realizó esa premultiplicación. Esto significa que se necesita más información que simplemente "RGBA" para determinar cómo manejar una imagen.
En algunos contextos, la abreviatura "RGBA" significa un diseño de memoria específico (llamado RGBA8888 a continuación), y se utilizan otros términos como "BGRA" para indicar alternativas. En otros contextos, "RGBA" significa cualquier diseño.
En los gráficos por ordenador, los píxeles que codifican la información del espacio de color RGBA deben almacenarse en la memoria del ordenador (o en archivos en el disco). En la mayoría de los casos, se utilizan cuatro piezas de memoria adyacentes de igual tamaño, una para cada canal, y un 0 en un canal indica color negro o alfa transparente, mientras que todos los bits 1 indican blanco o alfa totalmente opaco. Con diferencia, el formato más común es almacenar 8 bits (un byte ) para cada canal, lo que supone 32 bits para cada píxel.
El orden de estos cuatro bytes en la memoria puede variar, lo que puede generar confusión cuando se intercambian datos de imágenes. Estas codificaciones suelen estar indicadas por las cuatro letras en algún orden (normalmente RGBA). La interpretación de estas mnemónicas de 4 letras no está bien establecida. Hay dos formas típicas de entender la mnemónica "RGBA":
En un sistema big-endian , los dos esquemas son equivalentes. No es el caso de un sistema little-endian , donde los dos mnemónicos son inversos entre sí. Por lo tanto, para ser inequívocos, es importante indicar qué orden se utiliza cuando se hace referencia a la codificación. En este artículo se utilizará un esquema que tiene cierta popularidad, que consiste en agregar el sufijo "8888" para indicar si se están analizando 4 unidades de 8 bits o "32" si se está analizando una unidad de 32 bits.
Little-endian | Big-endian | |
---|---|---|
RGBA8888 | ABGR32 | RGBA32 |
ARGB32 | BGRA8888 | ARGB8888 |
RGBA32 | ABGR8888 | RGBA8888 |
En OpenGL y Portable Network Graphics (PNG), se utiliza el orden de bytes RGBA, donde los colores se almacenan en la memoria de manera que R está en la dirección más baja, G después, B después de eso y A por último. En una arquitectura little endian esto es equivalente a ABGR32. [1]
En muchos sistemas, cuando hay más de 8 bits por canal (como 16 bits o punto flotante), los canales se almacenan en orden RGBA, incluso si los canales de 8 bits se almacenan en algún otro orden.
Los canales están organizados en la memoria de tal manera que un solo entero sin signo de 32 bits tiene la muestra alfa en los 8 bits más altos, seguida por la muestra roja, la muestra verde y finalmente la muestra azul en los 8 bits más bajos:
Los valores ARGB se expresan típicamente usando 8 dígitos hexadecimales , con cada par de dígitos hexadecimales representando los valores del canal Alfa, Rojo, Verde y Azul, respectivamente. Por ejemplo, 80FFFF00
representa 50.2% amarillo opaco (no premultiplicado). El 80
valor 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 (FF hexadecimal); para continuar descifrando el 80FFFF00
valor, el primero FF
representa el valor máximo que puede tener el rojo; el segundo FF
es como el anterior pero para el verde; el final 00
representa el valor mínimo que puede tener el azul (efectivamente, sin azul). En consecuencia, rojo + verde produce amarillo. En los casos en los que no se usa el alfa, esto se puede acortar a 6 dígitos RRGGBB
, por eso se eligió poner el alfa en los bits superiores. Dependiendo del contexto, se coloca un 0x
o un signo de número (#) [2] antes de los dígitos hexadecimales.
Esta disposición se hizo popular cuando se introdujo el color de 24 bits (y el RGBA de 32 bits) en las computadoras personales. En ese momento, era mucho más rápido y fácil para los programas manipular una unidad de 32 bits que cuatro unidades de 8 bits.
En sistemas little-endian, esto es equivalente al orden de bytes BGRA. En sistemas big-endian, esto es equivalente al orden de bytes ARGB.
This section's factual accuracy is disputed. (December 2015) |
En algunos programas que se originaron en máquinas big-endian como Silicon Graphics , los colores se almacenaban en 32 bits de manera similar a ARGB32, pero con el alfa en los 8 bits inferiores en lugar de en los superiores. Por ejemplo, 808000FF
sería Rojo y Verde: 50,2 %, Azul: 0 % y Alfa: 100 %, un marrón. Esto es lo que obtendría si los datos RGBA8888 se leyeran como palabras en estas máquinas. Se utiliza en Portable Arbitrary Map y en FLTK , pero en general es poco común.
Los bytes se almacenan en la memoria en una máquina little-endian en el orden ABGR.
#aarrggbb
ysc# scA,scR,scG,scB