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:
