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.

#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:

textColor   <<     >>   INVERSE