Domanda

Come posso convertire un valore in scala di grigi (0-255) in un valore / rappresentazione RGB? È per l'utilizzo in un'immagine SVG, che non sembra avere un supporto in scala di grigi, solo RGB ...

Nota: questo non è RGB - > scala di grigi, a cui è già stata data risposta in un'altra domanda, ad es. Conversione di RGB in scala di grigi / intensità )

È stato utile?

Soluzione

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

Questo è rapido e sporco perché la luminanza effettiva che ottieni dipende dalla luminanza effettiva dei subpixel R, G e B del dispositivo che stai utilizzando.

Altri suggerimenti

Se hai il valore di scala di grigi in una variabile e desideri produrre un nuovo valore nel formato 0x00RRGGBB, un modo rapido per farlo è:

int rgb = grey * 0x00010101;

o equivalente nella lingua scelta.

La conversione di una scala di grigi in RGB è semplice. Usa semplicemente R = G = B = valore grigio. L'idea di base è che il colore (visto su un monitor in termini di RGB) sia un sistema additivo.

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

Aggiungendo così il rosso al verde si ottiene il giallo. Aggiungi un po 'di blu a quel mix in uguali quantità e otterrai un colore neutro. Completo su [rosso, verde, blu] = [255 255 255] restituisce il bianco. [0,0,0] rese monitor nero. I valori intermedi, quando R = G = B sono tutti uguali, producono colori nominalmente neutri del dato livello di grigio.

Un problema minore dipende da come si visualizza il colore, potrebbe non essere perfettamente neutro. Ciò dipenderà dalla calibrazione del monitor (o della stampante). Ci sono interessanti profondità della scienza del colore che potremmo approfondire da questo punto. Mi fermerò qui.

La scala di grigi indica che tutti i valori hanno la stessa intensità. Impostare tutti i canali (in RGB) uguali al valore di grigio e si avrà un'immagine RGB in bianco e nero.

Impostando R, G e B sullo stesso valore (il valore della scala dei grigi) per ogni pixel otterresti una tonalità di grigio corretta?

Puoi anche dare un'occhiata alla mia soluzione Modo più rapido di assemblaggio ottimizzato per convertire l'immagine RGB8 in immagine RGB32 . Il canale grigio viene semplicemente ripetuto in tutti gli altri canali.

Lo scopo era quello di trovare la soluzione a digiuno possibile per la conversione utilizzando x86 / SSE.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top