2009-05-07 8 views

risposta

21

L'approccio rapido e sporco consiste nel ripetere l'intensità della scala di grigi per ciascun componente di RGB. Quindi, se hai scala di grigi 120, si traduce in RGB (120, 120, 120).

Questo è veloce e sporca perché la luminanza efficace si ottiene dipende dalla luminanza effettiva dei subpixel R, G e B del dispositivo che si sta utilizzando.

7

gradazione di grigio significa che tutti i valori hanno la stessa intensità. Imposta tutti i canali (in RGB) uguale al valore di grigio e avrai un'immagine RGB in bianco e nero.

+2

Bene, no. In realtà NON avrai un'immagine in bianco e nero. Avrai un'immagine composta da varie sfumature di grigio. Ad un livello inferiore, i pixel reali saranno composte da puntini rossi, verdi e blu, a livelli di intensità tale che la persona che visualizza questo da una distanza vedrà un'immagine neutra. Fai un giro oculare e guarda pixel nominalmente grigi sul tuo monitor. Vedrai un composito di punti rossi, verdi e blu. –

+0

Hai ragione sul fatto che l'immagine resa sullo schermo sarà composta da tutti gli RGB che guardano la maginificazione. Quindi tutti i colori saranno rappresentati su uno schermo. Ho difficoltà a capire come "Avrai un'immagine composta da varie sfumature di grigio" diversa da un'immagine in scala di grigi. – Erik

+1

Erik, non è così, ma "l'immagine in scala di grigi" differisce parecchio da "immagine in bianco e nero" (che è solo due colori). – Aistina

4

impostazione R, G, B e allo stesso valore (il valore in scala di grigi) per ogni pixel Woudln't si ottiene una corretta sfumatura di grigio?

+2

Non esattamente. Dipende da come vedrai il colore. Come viene calibrato il monitor o la stampante? In quale ambiente di visualizzazione vedrai il colore? SE il colore verrà stampato, come viene calibrata la tua stampante, caratterizzata? Quali impostazioni sono state utilizzate per la stampante e qualsiasi profilo ICC? Punti bianchi? Quale illuminante viene utilizzato per visualizzare la stampa? Luce del sole? Lampadina del simulatore D50? Lampada al tungsteno? Ad un ragionevole grado di approssimazione, R = G = B = il valore di grigio è comunque un buon inizio. Ti farà avvicinare. –

7

Conversione di una scala di grigi a RGB è semplice. Basta usare R = G = B = valore grigio. L'idea di base è che il colore (come visualizzato su un monitor in termini di RGB) è un sistema additivo.

http://en.wikipedia.org/wiki/Additive_color

Così l'aggiunta di rosso ai rendimenti giallo verde. Aggiungi del blu a quel mix in parti uguali e ottieni un colore neutro. Completo su [rosso, verde, blu] = [255 255 255] produce bianco. [0,0,0] restituisce il monitor nero. I valori intermedi, quando R = G = B sono tutti uguali, produrranno colori nominalmente neutri del livello di grigio specificato.

Un problema minore dipende dalla modalità di visualizzazione del colore, potrebbe non essere perfettamente neutrale. Ciò dipenderà dal modo in cui il monitor (o la stampante) è calibrato. Ci sono interessanti profondità della scienza del colore che potremmo approfondire da questo punto. Mi fermerò qui.

25

Se avete il valore in scala di grigi in una variabile e vuole produrre un nuovo valore sotto forma 0x00RRGGBB, quindi un modo rapido per farlo è:

int rgb = grey * 0x00010101; 

o equivalente nella lingua prescelta.

+4

+1 per la moltiplicazione diretta. L'istinto è quello di immergersi nei bit shift e negli OR bit a bit, ma questo è molto più semplice e funziona. –

+1

Oppure 'rgb = gray << 16 | grigio << 8 | grey', dove '<<' è l'operatore di spostamento a sinistra con segno, e '|' l'OR bit a bit incluso. – sp00m