Question

Comment convertir une valeur en niveaux de gris (0-255) en une valeur / représentation RVB? C’est pour utiliser dans une image SVG, qui ne semble pas venir avec un support en niveaux de gris, seulement ...

Remarque: ceci n'est pas RVB - > niveaux de gris, auxquels on a déjà répondu dans une autre question, par ex. Conversion de RVB en niveaux de gris / intensité )

Était-ce utile?

La solution

L’approche rapide et délicate consiste à répéter l’intensité en niveaux de gris pour chaque composant RVB. Donc, si vous avez 120 niveaux de gris, cela se traduit par 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, G et B de l'appareil que vous utilisez.

Autres conseils

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 (telle que 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 toutes égales, donneront des couleurs nominalement neutres du niveau de gris donné.

Un problème mineur dépend de votre perception de 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.

L'échelle de gris signifie 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.

Ne définissez-vous pas R, G et B sur la même valeur (la valeur d'échelle de gris) pour chaque pixel pour obtenir une nuance de gris correcte?

Vous pouvez également consulter ma solution Assemblage plus rapide, moyen optimisé pour convertir une image RGB8 en image RGB32 . Le canal gris est simplement répété sur tous les autres canaux.

Le but était de trouver la solution possible à jeun pour la conversion en utilisant x86 / SSE.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top