Comment convertir une valeur en niveaux de gris (0-255) en une valeur/représentation RGB? Il est destiné à une utilisation dans une image SVG, qui ne semble pas être compatible avec les niveaux de gris, mais uniquement en RVB ...
Remarque: il ne s'agit pas de RVB -> niveaux de gris, ce à quoi une réponse a déjà été donnée, par exemple. Conversion de RVB en niveaux de gris/intensité )
L'approche rapide et sale consiste à répéter l'intensité des niveaux de gris pour chaque composant RVB. Donc, si vous avez 120 niveaux de gris, cela se traduit en RVB (120, 120, 120).
Ceci est rapide et sale car la luminance effective que vous obtenez dépend de la luminance réelle des sous-pixels R, V et B de l'appareil que vous utilisez.
Si vous avez la valeur en niveaux de gris dans une variable et souhaitez générer une nouvelle valeur sous la forme 0x00RRGGBB, voici un moyen rapide de procéder:
int rgb = grey * 0x00010101;
ou équivalent dans la langue de votre choix.
La conversion d'une échelle de gris en RVB est simple. Utilisez simplement R = G = B = valeur de gris. L'idée de base est que la couleur (vue sur un moniteur en termes de RVB) est un système additif.
http://en.wikipedia.org/wiki/Additive_color
Ainsi, ajouter du rouge au vert donne du jaune. Ajoutez un peu de bleu à ce mélange en quantités égales et vous obtenez une couleur neutre. Complètement allumé [rouge, vert, bleu] = [255 255 255] donne du blanc. [0,0,0] donne un noir au moniteur. Les valeurs intermédiaires, lorsque R = G = B sont égaux, donneront des couleurs nominalement neutres du niveau de gris donné.
Un problème mineur dépend de la façon dont vous voyez la couleur. Elle peut ne pas être parfaitement neutre. Cela dépendra de la façon dont votre moniteur (ou votre imprimante) est calibré. À partir de là, il est intéressant d’approfondir la science des couleurs. Je vais m'arrêter ici.
Les niveaux de gris signifient que toutes les valeurs ont la même intensité. Définissez tous les canaux (en RVB) égaux à la valeur de gris et vous obtiendrez une image en noir et blanc RVB.
Si vous définissez les valeurs R, G et B sur la même valeur (la valeur d'échelle de gris) pour chaque pixel, vous obtenez une nuance de gris correcte?
Vous pouvez également jeter un oeil à ma solution Faster Assembly optimise la conversion d’une image RGB8 en image RGB32 Le canal gris est simplement répété dans tous les autres canaux.
Le but était de trouver la solution possible à jeun pour la conversion en utilisant x86/SSE.