drawInverse

Il y a deux modes pour les fonctions de dessins et de textes. Dans le mode NORMAL, le dessin se fait dans la couleur demandée (celle qui est spécifiée sinon la dernière utilisée). En mode INVERSE, la couleur demandée est ignorée et chaque point dessiné va prendre la couleur complémentaire de ce qu'il y avait. En dessinant deux fois la même chose au même endroit, on revient à l'écran de départ. Cela permet par exemple de dessiner une sélection, puis de l'effacer sans avoir à mémoriser la zone (ce qui est très long, car il faudrait le faire sur la carte SD). On peut aussi écrire une phrase de façon provisoire sur une image.

La variable drawInverse permet de lire ou de changer la manière de dessiner.

 

Exemples d'utilisation

drawInverse = INVERSE; // Passe en mode inversion
drawInverse = NORMAL; // Repasse en mode dessin
drawInverse = INVERSE; fillRect(0,0,MAX_X,MAX_Y); // Inverse les couleurs de l'écran
drawInverse = INVERSE; clrscr(); // clrscr() ignorant le mode, efface l'écran et passe en mode normal
if (drawInverse==INVERSE) ... // Teste si on est en mode inversion
if (drawInverse) ... // Teste si on est en mode inversion (INVERSE vaut en fait true)

 

Référence

boolean drawInverse;

 

Voir aussi

- INVERSE permet le passage en mode inversion
- NORMAL permet le passage en mode dessin
- setDrawInverse(); Choix du mode dessin ou inversion
- getDrawInverse(); Retourne NORMAL, INVERSE
- clrscr(); Efface l'écran
- RGBcolor(); Transforme un triplet RGB en un code couleur
- setTextColor(); Couleur du texte
- Toutes les fonctions concernées: point(), fillRect(), hLine(), vLine(), line(), lineTo(), rect(), circle(), arc(), text()

 

Notes

L'inversion fonctionne très bien sur des zones très claires ou très sombres. Pas du tout sur les couleurs moyennes.

Lors de l'affichage des caractères, certains points sont dessinés une fois, mais souvent les extrémités sont dessinées deux fois. En mode inversion, les points dessinés une fois vont s'inverser, mais pas ceux qui sont dessinées deux fois. Les textes sont moins nets en mode inversion. Pour la même raison, les textes filliformes (épaisseur 1) passent mieux que les gras.

L'inversion fonctionne pour les dessins de points, de droites, de cercles, de pavés, de textes... Cela n'a aucun effet sur l'affichage des bitmaps et sur clrscr(). En mode inversion, le passage en paramètre d'une couleur n'a aucun effet.

L'inversion est utilisée lors de la sauvegarde des bitmaps pour procurer des hachures de progression.

Après un clrscr(), le mode est NORMAL. Il en est de même à l'initialisation de l'écran par setGraphMode() qui efface l'écran.

On peut utiliser la fonction setDrawInverse() ou la variable drawInverse pour changer le mode, et la fonction getDrawInverse() ou la variable drawInverse pour lire le mode. Utiliser les fonctions est mieux (plus de sécurité), mais utiliser la variable nécessite moins d'octets dans un contexte de carte Uno, c'est une économie.

 

Côté technique

En mode dessin, un point est dessiné par point(x, y, couleur); En mode inversion, c'est par point(x, y, ~getPoint(x,y)); Du coup, si en mode inversion, on fait point(x, y, couleur), le paramètre couleur est ignoré. Dans la bibliothèque PecheuxGraph, en mode inversion, point(x, y); appelle point(x, y, ancienne_couleur); qui ignore précisément le dernier paramètre. Mais cela économise du code.

getDrawInverse()   <<     >>   point()