2009-05-07 21 views

Respuesta

21

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 obtiene depende de la luminancia real de los subpíxeles R, G y B del dispositivo que está utilizando.

7

Escala de grises significa que todos los valores tienen la misma intensidad. Establezca todos los canales (en RGB) igual al valor gris y tendrá una imagen RGB en blanco y negro.

+2

Bueno, no. En realidad, NO tendrás una imagen en blanco y negro. Tendrás una imagen compuesta de varios tonos de gris. En un nivel inferior, los píxeles reales estarán compuestos de puntos rojos, verdes y azules, a niveles de intensidad tales que la persona que lo vea a distancia verá una imagen neutral. Haga un recorrido visual y observe píxeles nominalmente grises en su monitor. Verá un compuesto de puntos rojos, verdes y azules. –

+0

Tiene la razón de que la imagen procesada en la pantalla estará compuesta de todos los RGB que miren la maginificación. Entonces todos los colores estarán representados en una pantalla. Me es difícil entender cómo "Tendrá una imagen compuesta de varios tonos de gris" difiere de una imagen de escala de grises. – Erik

+1

Erik, no es así, pero la "imagen de escala de grises" difiere bastante de la "imagen en blanco y negro" (que son solo dos colores). – Aistina

4

¿No configura R, G y B con el mismo valor (el valor de escala de grises) para cada píxel para obtener un tono de gris correcto?

+2

No exactamente. Depende de cómo verás el color. ¿Cómo se calibra su monitor o impresora? ¿En qué entorno de visualización verá el color? SI el color se imprimirá, ¿cómo se calibra la impresora, se caracteriza? ¿Qué configuraciones se han empleado para la impresora y cualquier perfil ICC? Puntos blancos? ¿Qué iluminante se usa para ver la impresión? ¿Luz de sol? Bombilla D50 simulador? Lámpara de tungsteno? En un grado razonable de aproximación, R = G = B = el valor de gris es un buen comienzo. Te acercará. –

7

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 la adición de rojo a rendimientos verde 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] rendimiento monitor negro. Los valores intermedios, cuando R = G = B son todos iguales producirán colores nominalmente neutros del nivel dado de gris.

Un problema menor depende de cómo ve 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 abordar a partir de este punto. Me detendré aquí.

25

Si tiene el valor de escala de grises en una variable y quiere producir un nuevo valor en la forma 0x00RRGGBB, a continuación, una forma rápida de hacer esto es:

int rgb = grey * 0x00010101; 

o su equivalente en el idioma elegido.

+4

+1 para la multiplicación directa. El instinto es sumergirse en los cambios de bits y en los bits de OR, pero esto es mucho más simple y simplemente funciona. –

+1

O 'rgb = gris << 16 | gris << 8 | grey', donde '<<' es el operador de desplazamiento a la izquierda con signo, y '|' el OR incluido a nivel de bits. – sp00m

Cuestiones relacionadas