colors - modo - ¿Convertir valor de escala de grises a representación RGB?
modos de color rgb (6)
¿Cómo puedo convertir un valor de escala de grises (0-255) a un valor / representación RGB? Es para usar en una imagen SVG, que no parece venir con un soporte de escala de grises, solo RGB ...
Nota: esto no es RGB -> escala de grises, que ya se ha respondido en otra pregunta, por ejemplo, Convertir RGB a escala de grises / intensidad )
¿Si no configura R, G y B en el mismo valor (el valor de la escala de grises) para cada píxel, obtendrá el tono de gris correcto?
El enfoque rápido y sucio es repetir la intensidad de escala de grises para cada componente de RGB. Por lo tanto, si tiene escala de grises 120, se traduce a RGB (120, 120, 120).
Esto es rápido y sucio porque la luminancia efectiva que obtiene depende de la luminancia real de los subpíxeles R, G y B del dispositivo que está utilizando.
La conversión de una escala de grises a RGB es simple. Simplemente use R = G = B = valor de gris. La idea básica es que el color (como se ve en un monitor en términos de RGB) es un sistema aditivo.
http://en.wikipedia.org/wiki/Additive_color
De este modo, la adición de rojo a verde produce amarillo. Agregue algo de azul a esa mezcla en cantidades iguales, y obtendrá un color neutro. Completo en [rojo, verde, azul] = [255 255 255] produce blanco. [0,0,0] rendimientos monitor negro. Los valores intermedios, cuando R = G = B son todos iguales, producirán colores nominalmente neutros del nivel de gris dado.
Un problema menor depende de cómo se vea el color, puede que no sea perfectamente neutral. Esto dependerá de cómo esté calibrado su monitor (o impresora). Hay profundidades interesantes de la ciencia del color a las que podríamos entrar desde este punto. Me detendré aquí
La escala de grises significa que todos los valores tienen la misma intensidad. Establezca todos los canales (en RGB) igual al valor de gris y tendrá una imagen RGB en blanco y negro.
Si tiene el valor de escala de grises en una variable y desea generar un nuevo valor en la forma 0x00RRGGBB, una forma rápida de hacerlo es:
int rgb = grey * 0x00010101;
o equivalente en su idioma elegido.
También puede echar un vistazo a mi solución. Una forma más rápida y optimizada de ensamblaje para convertir la imagen RGB8 a la imagen RGB32 . El canal gris se repite simplemente en todos los demás canales.
El propósito era encontrar la solución más rápida posible para la conversión utilizando x86 / SSE.