Les couleurs sous XNA

Publié le par DigitalGuru

Les couleurs en infographie
Par Digital Guru

1  Introduction

En infographie (et par conséquent dans XNA) les couleurs ne sont pas gérées de la même manière que dans la vie courante. En effet, nous allons voir que une couleur peut être réprésentez de différentes manières, mais toujours selon la même base.

2  RGB, les trois composantes magiques !

RGB qui signifie Red Green Blue (RVB en français), est l'acronyme des trois couleurs primaires. Ces trois couleurs, vou le savez, permettent de représenter à peu prêt n'importe quelle couleur visible !.
Ainsi, une couleur peut être vue comme la modulation de trois valeurs, allant chacune de 0 à 255. Ce qui fait 2553 couleurs possibles ! En plus de ça, une dernière composante est ajoutée, la composante Alpha (ici notée a) qui définit la valeur de la transparence, ce qui nous fait 2554 couleurs possible soit plus de 4 milliards de couleur possibles. Pas mal non ? Malheureusement, votre moniteur n'est pas capable de toutes les afficher, mais les différences sont tellement infime que l'oeil n'y voit que du feu !
La représentation la plus simple d'une couleur est faite par la classe Color de XNA, et ses paramètre R,G,B et A, qui contiennt respectivement la valeur rouge, verte bleu et a de la couleur. Cependant, il n'est pas tellement aisé de la manipuler pour plusieurs raisons.
  1. Les shaders n'accepte que les Vector4, il faut donc une conversion à chaque image; pas très commode.
  2. Lorsqu'une classe couleur est instanciée, les valeurs ne peuvent plus être modifiée.
  3. Si les couleur sont non transparentes, un canal est utilisé pour rien.
  4. Lors de l'instanciation d'un classe color, de nombreux objets sont crées pour rien.
  5. Les vecteurs s'ajoutent facilement car l'opérateur + est surchargé. De plus ils sont très légers.
Vous l'avez compris, l'utilisation de vecteurs pour stocker une couleur est la meilleur solutions, mais je me dois de vous en présenter une dernière encore très utilisée, car en un seul entier, elle stocke les trois composante R,G et B.

3  Int32 ARGB

Et oui, vous avez bien entendu, en un seul entier, 3 voir 4 composantes peuvent être contenues !
Etudions la fonction de création de cet entier : RGB = R + G ×256 + B ×2562
Je vous épargne la démonstration (mais ceux qui ont étudié les congruences devraient s'en sortir assez facilement) mais sachez que :
  1. R = RGB mod 256
  2. G = E([RGB/256]) mod 256
  3. B = E([RGB/(2562)]) mod 256
(où E(x) est la fonction qui a x associe le grand entier ³ à x (fonction partie entière))
Faisons un petit test avec la couleur blanche : 16777215
R = 16777215 mod 256 = 255
G = E([16777215/256]) mod 256 = E(255,99609375) mod 256 = 255
R = E([16777215/(2562)]) mod 256 = E(255,990087) mod 256 = 255
Nous retrouvons bien nos composantes R,G et B a 255 (ouf :p).
Et la couche a me direz vous ! Et bien, c'est simple, c'est une composante de plus, on l'obtient donc comme ceci : a = B = E([RGB/(2563)]) mod 256

4  Conclusion

Deux choses à retenir. D'abord, vous êtes apte à programmer de nombreux filtres pour vos images, quelque soit le conteneur de couleur (un vecteur, un int, une classe Color). Ensuite, utilisez le plus souvent possible des vecteurs pour traiter vos couleurs.
En espérent que ce papier vous a plu !


File translated from TEX by TTH, version 3.77.
On 24 Mar 2007, 22:51.

Publié dans [Coding] - Mini tuto

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article