stringtranslate.com

Modelo de color RGBA

Ejemplo de una imagen RGBA compuesta sobre un fondo de tablero de ajedrez. alfa es 0% en la parte superior y 100% en la parte inferior.

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.

Representación

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 del 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.

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.

ARGB32

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:

Ejemplo de diseño en un píxel típico de 32 bpp

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, 80FFFF00representa 50.2% amarillo opaco (no premultiplicado). El 80valor 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 80FFFF00valor, el primero FFrepresenta el valor máximo que puede tener el rojo; el segundo FFes como el anterior pero para el verde; el final 00representa 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 0xo 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.

RGBA32

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, 808000FFserí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.

Véase también

Referencias

  1. ^ "Especificación de gráficos de red portátiles (PNG) (segunda edición)". www.w3.org . Consultado el 25 de noviembre de 2021 .
  2. ^ Referencia de estructura de color XAML de Microsoft MSDN (XAML/WPF/Silverlight), que incluye #aarrggbbysc# scA,scR,scG,scB

Enlaces externos