Constantes pour la gestion des couleurs

MAX_RED est la valeur maximale de la composante rouge
MAX_GREEN est la valeur maximale de la composante verte
MAX_BLUE est la valeur maximale de la composante bleue
MAX_GREY est la valeur maximale de la composante grise
RANDOM_RED est une valeur de composante rouge prise au hasard
RANDOM_GREEN est une valeur de composante verte prise au hasard
RANDOM_BLUE est une valeur de composante bleue prise au hasard
RANDOM_GREY est une valeur de composante grise prise au hasard

Une couleur est un word en mode 16 bits qui contient les informations des trois composantes rouge vert bleu. On passe une couleur pour les dessins, pour les textes... Une composante couleur est donc une partie de ce word. Choisir les trois composantes permet de définir plus simplement une couleur que de manipuler les bits. La fonction RGBcolor() permet de transformer les trois composantes en une couleur.

Ces "constantes" permettent d'éviter d'utiliser les nombres comme 31 ou 63. Elles permettent aussi une compatibilité si on passe en mode 18 bits. Elles rendent plus claires les écritures de programmes. Par exemple si on voit RGBcolor(31,0,0), c'est moins parlant que RGBcolor(MAX_RED,0,0). Bien entendu il faut écrire correctement car RGBcolor(MAX_BLUE,0,0) c'est du rouge!

On peut utiliser random(MAX_RED+1) qui donne réellement un rouge au hasard, au lieu de RANDOM_RED, mais on aura beaucoup de couleurs très sombres. C'est peu esthétique. RANDOM_??? sont en fait des fonctions, mais on les utilise comme si c'étaient des constantes.

Attention: toutes ces constantes sont faites pour être utilisables dans l'appel à la fonction RGBcolor(). On se souviendra que ce sont des composantes d'une couleur et pas une couleur.

RANDOM_COLOR est une couleur prise au hasard

Attention: Ne pas utiliser RANDOM_COLOR dans la fonction RGBcolor(). RANDOM_COLOR est déjà une couleur, et on l'utilisera directement dans les fonctions graphiques comme line(), rect() setTextColor()... quand on a besoin d'une couleur

Comme pour les autres fonctions RANDOM_???, RANDOM_COLOR donne une couleur pas trop sombre.

 

Exemples d'utilisation

// Ligne de couleur prise au hasard:
line(x1, y1, x2, y2, RANDOM_COLOR);
// Cercle dont la couleur est comprise entre le noir et du bleu:
circle(x, y, rayon, RGBcolor(0, 0, RANDOM_BLUE);
// Cercle dont la couleur est comprise entre rouge (RANDOM_BLUE=0) et du magenta:
circle(x, y, rayon, RGBcolor(MAX_RED, 0, RANDOM_BLUE);
// Donne un cercle dont la couleur est comprise entre le jaune et le blanc:
circle(x, y, rayon, RGBcolor(MAX_RED, MAX_GREEN, RANDOM_BLUE); 

 

Référence

#define MAX_RED 31
#define MAX_GREEN 63
#define MAX_BLUE 31
#define MAX_GREY 31
#define RANDOM_RED (random(27)+5)
#define RANDOM_GREEN (random(54)+10)
#define RANDOM_BLUE (random(27)+5)
#define RANDOM_GREY (random(27)+5)
#define RANDOM_COLOR (RGBcolor(random(27)+5, random(54)+10, random(27)+5))

 

Voir aussi

- RGBcolor(); Transforme un triplet RGB en un code couleur
- getColor(); Retourne la couleur par défaut pour les dessins
- setTextColor(); Couleur du texte
- BLACK, WHITE, ...: Constantes couleurs
- 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
- text(); Écrit du texte

 

Exemple

PecheuxGraph_ILI9341_8bits.zip\PecheuxGraph_ILI9341_8bits\examples\Documentation\Exemple-105-MAX_RED\Exemple-105-MAX_RED.ino (dans votre fichier téléchargé):

// Ce programme affiche des bandes verticales, montrant l'utilisation
// possibles des maximum de couleurs. On peut voir que le vert à une
// résolution supérieure aux 2 autres composantes. Des bandes montrent des
// composantes ou des couleurs prises au hasard

#
  $menu = ":PG";
  include <PecheuxGraph_ILI9341_8bits.h>

void setup() 
{
  setGraphMode(PAYSAGE);
  
  int L=LARGEUR/9; // On dessine des bandes de L de large (attention 9*L ne fait pas LARGEUR
                       // du fait de la division entière)
  
  // Pour le rouge pur, on trace des lignes dont la couleur va du (0,0,0) au (MAX_RED,0,0)
  //    la quantité de vert est trouvé par une règle de 3:
  //               HAUTEUR  <---->  MAX_RED+1
  //                 y    <---->     ?
  // Pour le calcul, y doit être de type long, avec un int cela dépasserait, puis on converti
  
  for (long y=0; y<=MAX_Y; y++)
	  hLine(0*L, 1*L, y, RGBcolor(int((y*(MAX_RED+1))/HAUTEUR),0,0)); // Dégradés de rouges
  for (long y=0; y<=MAX_Y; y++)
	  hLine(1*L, 2*L, y, RGBcolor(0,int((y*(MAX_GREEN+1))/HAUTEUR),0)); // Dégradés de verts
  for (long y=0; y<=MAX_Y; y++)
	  hLine(2*L, 3*L, y, RGBcolor(0,0,int((y*(MAX_BLUE+1))/HAUTEUR))); // Dégradés de bleus
  for (long y=0; y<=MAX_Y; y++)
	  hLine(3*L, 4*L, y, RGBcolor(int((y*(MAX_GREY+1))/HAUTEUR))); // Dégradés de gris
  for (long y=0; y<=MAX_Y; y++)
	  hLine(4*L, 5*L, y, RGBcolor(RANDOM_RED,0,0)); // Rouges au hasard
  for (long y=0; y<=MAX_Y; y++)
	  hLine(5*L, 6*L, y, RGBcolor(0,RANDOM_GREEN,0)); // Verts au hasard
  for (long y=0; y<=MAX_Y; y++)
	  hLine(6*L, 7*L, y, RGBcolor(0,0,RANDOM_BLUE)); // Bleus au hasard
  for (long y=0; y<=MAX_Y; y++)
	  hLine(7*L, 8*L, y, RGBcolor(RANDOM_GREY)); // Gris au hasard
  for (long y=0; y<=MAX_Y; y++)
	  hLine(8*L, 9*L, y, RANDOM_COLOR); // Couleurs au hasard
}

void loop()
{
}

Résultat: