Pregunta

¿Cómo puedo convertir un valor de escala de grises (0-255) en un valor / representación RGB? Es para usar en una imagen SVG, que no parece venir con soporte de escala de grises, solo RGB ...

Nota: esto no es RGB - > escala de grises, que ya se respondió en otra pregunta, p. Conversión de RGB a escala de grises / intensidad )

¿Fue útil?

Solución

El enfoque rápido y sucio es repetir la intensidad de escala de grises para cada componente de RGB. Entonces, si tiene escala de grises 120, se traduce a RGB (120, 120, 120).

Esto es rápido y sucio porque la luminancia efectiva que obtienes depende de la luminancia real de los subpíxeles R, G y B del dispositivo que estás usando.

Otros consejos

Si tiene el valor de escala de grises en una variable y desea producir un nuevo valor en la forma 0x00RRGGBB, entonces una forma rápida de hacerlo es:

int rgb = grey * 0x00010101;

o equivalente en el idioma elegido.

La conversión de una escala de grises a RGB es simple. Simplemente use R = G = B = valor 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

Por lo tanto, agregar rojo a verde produce amarillo. Agregue un poco 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] produce 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 veas 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 que podríamos profundizar desde este punto. Me detendré aquí.

La escala de grises significa que todos los valores tienen la misma intensidad. Configure todos los canales (en RGB) iguales al valor gris y tendrá una imagen RGB en blanco y negro.

¿No establecer R, G y B en el mismo valor (el valor de la escala de grises) para cada píxel le daría un tono de gris correcto?

También puede echar un vistazo a mi solución Forma optimizada de ensamblaje más rápido para convertir una imagen RGB8 en una imagen RGB32 . El canal gris simplemente se repite en todos los demás canales.

El propósito era encontrar la posible solución en ayunas para la conversión usando x86 / SSE.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top