RGBcolor()
Transforme des composantes couleurs en une couleur correspondante
On peut utiliser une couleur dans les fonctions de dessins et pour écrire une texte. La couleur est composée de 3 composantes. Ces dernières ne sont pas des couleurs et ne doivent pas être utilisées dans les fonctions sauf pour la fonction RGBcolor() qui permet de passer de 3 composantes à une couleur.
Exemples d'utilisation
RANDOM_RED: Est une composante rouge aléatoire; ce n'est pas une couleur (les bits du rouge sont mal placés) RANDOM_GREEN: Est une composante verte aléatoire RANDOM_BLUE: Est une composante bleue aléatoire; il se trouve que l'on peut l'utiliser comme une couleur, mais je le déconseille RANDOM_GREY: Est une composante grise aléatoire RANDOM_COLOR: Est une couleur aléatoire RANDOM_COLOR | GREY: Est une couleur aléatoire plus claire que le gris RANDOM_COLOR | LIGHT_GREY: Est une couleur aléatoire plus claire que le gris clair RGBcolor(RANDOM_RED, 0, 0): Donne une couleur rouge aléatoire RGBcolor(RANDOM_RED, RANDOM_GREEN, 0): Donne une couleur dans les jaunes, rouges, verts aléatoire RGBcolor(RANDOM_RED, RANDOM_GREEN, RANDOM_BLUE): équivalent de random(RANDOM_COLOR), donne une couleur aléatoire RGBcolor(RANDOM_GREY): Donne une couleur grise aléatoire RGBcolor(0): Donne du noir (gris=0) RGBcolor(MAX_GREY): Donne du blanc RGBcolor(MAX_GREY-1): Donne le gris le plus clair possible RGBcolor(MAX_GREY-10): Donne un gris foncé RGBcolor(MAX_RED/4, MAX_GREEN/2, MAX_BLUE*2/3): Donne une couleur avec un peu de rouge, moitié de vert, pas mal de bleu. C'est un bleu pâle tirant un peu sur le vert clrscr(RGBcolor(MAX_RED/4, MAX_GREEN/2, MAX_BLUE*2/3));: Efface l'écran en le remplissant d'une sorte de bleu fillRect(x1, y1, x2, y2, RGBcolor(0, MAX_GREEN, 0));: Dessine un pavé vert qui peut servir de fond pour écrire des lettres
Référence
word RGBcolor(byte rouge, byte vert, byte bleu); word RGBcolor(byte gris);
Paramètres passés
rouge: nombre sur 5 bits donnant la composante rouge (0: pas de rouge, 31: rouge au maxi)
vert: nombre sur 6 bits donnant la composante verte (0: pas de vert, 63: vert au maxi)
bleu: nombre sur 5 bits donnant la composante bleue (0: pas de bleu, 31: bleu au maxi)
gris: nombre sur 5 bits donnant la profondeur du gris (0: noir, 31: blanc)
Valeur retournée
un entier donnant une couleur
Voir aussi
- setTextColor(); Couleur du texte
- getColor(); Retourne la couleur par défaut pour les dessins
- clrscr(); Efface l'écran
- MAX_RED...: Valeur maximum d'une composante couleur
- BLACK, WHITE, ...: Constantes couleurs
- setDrawInverse(); Choix du mode dessin ou inversion
- point(); Dessine un point
- line(); Trace une ligne
- rect(); Trace les bords d'un cadre
- fillRect(); Trace une boîte pleine
- circle(); Trace un cercle
- fill(); Remplit avec la couleur demandée
- text(); Écrit du texte
Notes
Il ne faut surtout pas confondre une couleur qui est un entier non signé 16 bits que l'on donne en paramètre aux fonctions de dessin et à setTextColor(), avec une composante couleur. Cette dernière est sur 5 ou 6 bits non signé, et permet de définir une couleur. Passer une composante rouge à un point, le dessinera en bleu! Les composantes ne sont utilisables qu'avec RGBcolor().
Exemple
PecheuxGraph_ILI9341_8bits.zip\PecheuxGraph_ILI9341_8bits\examples\Documentation\Exemple-108-RGBcolor\Exemple-108-RGBcolor.ino (dans votre fichier téléchargé):
// Ce programme montre alternativement les dégradés des couleurs primaires et du gris. # $menu = ":PG"; include <PecheuxGraph_ILI9341_8bits.h> void setup() { setGraphMode(PAYSAGE); // Obligatoire pour utiliser l'afficheur } void loop() { // Tracé de toutes les couleurs bleues clrscr(); for (int bleu=0; bleu<=MAX_BLUE; bleu++) // Pour toutes les valeurs de bleu hLine(0,MAX_X,bleu,RGBcolor(0,0,bleu)); // Tracer une ligne horizontale delay(1000); // Tracé de toutes les couleurs vertes clrscr(); for (int vert=0; vert<=MAX_GREEN; vert++) // Pour toutes les valeurs de vert hLine(0,MAX_X,vert,RGBcolor(0,vert,0)); // Tracer une ligne horizontale delay(1000); // Tracé de toutes les couleurs rouges clrscr(); for (int rouge=0; rouge<=MAX_RED; rouge++) // Pour toutes les valeurs de rouge hLine(0,MAX_X,rouge,RGBcolor(rouge,0,0)); // Tracer une ligne horizontale delay(1000); // Tracé de toutes les couleurs grises clrscr(); for (int gris=0; gris<=MAX_GREY; gris++) // Pour toutes les valeurs de gris hLine(0,MAX_X,gris,RGBcolor(gris)); // Tracer une ligne horizontale delay(1000); }
Résultat:

Côté technique
La relation entre la valeur numérique d'une composante et l'effet obtenu n'est pas linéaire. C'est pour cela que sont définis les noms de couleurs. En mode 16 bits, vu qu'il y a 2 fois plus de valeurs possibles pour le vert que pour les autres composantes, on pourrait penser que pour faire des gris, on pourrait prendre RGBcolor(X, 2X, X) ou RGBcolor(X, 2X+1, X). Mais dans la pratique cela ne fonctionne pas, cela donne des gris tendant sur le magenta. La fabrication du gris est un peu plus compliquée.
Du fait de cette non linéarité, une copie d'écran n'a pas du tout le même rendu sur un écran d'ordinateur, et un bitmap fait sur un ordinateur donnera des écarts de couleur et des couleurs plus sombres; voir noms de couleurs pour un aperçu.
Les bits R4:R0 de la composante rouge, les bits V5:V0 de la composante verte, et les bits B4:B0 de la composante bleue s'agencent ainsi pour faire le mot contenant la couleur:
