LA GESTON DES COULEURS
LISTE DES MOTS CLÉS SPÉCIFIQUES.
Mots clés du BBC BASIC.
CLG : efface les affichages graphiques de la fenêtre.
CLS : efface le contenu textuel de la fenêtre.
COLOR : synonyme de COLOUR.
COLOUR : définit la couleur des textes ou personnalise la palette de couleurs de la fenêtre de sortie.
GCOL : définit la couleur des graphiques.
MODE : permet de définir la fenêtre d'affichage du programme.
POINT() : retourne la couleur aux coordonnées données.
TINT() : retourne un entier avec la valeur RVB de la couleur aux coordonnées d'écran données.
VDU : configure certains paramètres de la fenêtre de sortie et/ou de ses composants.
Variables système du BBC BASIC.
@vdu.g.b& : retourne la couleur d'avant-plan actuelle pour les dessins, définie par GCOL.
@vdu.g.d& : retourne la couleur d'arrière-plan actuelle pour les dessins, définie par GCOL.
@vdu.t.c& : retourne la couleur d'avant-plan actuelle pour les textes, définie par COLOUR.
@vdu.t.d& : retourne la couleur d'arrière-plan actuelle pour les textes, définie par COLOUR.
@vdu.m.b& : retourne le nombre de couleurs dans la palette (quantité - 1).
PRÉAMBULE.
Rappel : quand on fait appel à une variable système, il est conseillé de fait marque une légère pause au programme avec la fonction WAIT() afin de s'assurer que les traitements en cours sont bien terminées et que les valeurs de ces variables ont bien été mise à jour.
Par défaut, un programme BBC BASIC se lancera dans une fenêtre par défaut, ne pouvant afficher que du texte ou des graphiques noir sur fond blanc. Cette configuration pouvant suffire pour des applications simples, ne nécessitant que du texte, avec peu de mise ne forme, est insuffisante pour exploiter pleinement les possibilités graphiques qu'offre le BBC BASIC.
Pour modifier les caractéristiques de la fenêtre, où s'exécutera le programme BBC BASIC, on peut utiliser l'instruction VDU 22 , 23 , largeur ; hauteur ; charx , chary , ncols , charset pour une configuration fortement personnalisée mai le plus souvent on aura recours à l'une des options de l'instruction MODE.
Convention : selon le mode de la fenêtre de sortie choisie, une palette utile de 2, 4 ou 16 couleurs est initialisée avec les 2, 4, 16 ou 128 couleurs de la palette d'origine. Ensuite, une couleur associée à un des codes de la palette utile peut est modifiée, mais l'association code-couleur de la palette d'origine est immuable.
La fenêtre obtenue avec l'instruction MODE 8, est une bonne configuration polyvalente, en s'adaptant aisément à la plupart des ordinateurs, ce qui permettra de déplacer son script sur d'autres machines sans avoir à adapter le code du programme en fonction de la configuration de l’hôte. L'option MODE 8 permet d'afficher :
- du texte en 80 colonnes sur 32 lignes ;
- des dessins en 1280 pixels de large sur 1024 pixels de haut (soit 640 x 412 unités graphiques) ;
- en 16 couleurs.
Avec BBC BASIC SDL 2.0 une unité graphique corresponds en réalité à deux unités d'image, ou pixels. Par exemple, en MODE 8, la fenêtre de sortie a une surface graphique de 640 x 512 points soit une surface d'image de 1280 x 1024 pixels.
Rappel : Bien qu'elles cohabitent, en se chevauchant, dans la fenêtre de sortie, la fenêtre graphique et la fenêtre textuelle sont bien 2 surfaces différentes. A l'initialisation d'une nouvelle fenêtre de sortie, les fenêtres textuelle et graphique s'étendent sur la totalité de la fenêtre de sortie du BBC BASIC, mais leur taille et leur position peuvent être modifiées, indépendamment l'une de l'autre, et elle pourront être restaurées à leur valeur initiale avec la commande VDU 26.
L'instruction CLS efface la fenêtre textuelle, alors L'instruction CLG supprimera le contenu de la fenêtre graphique. Si toute ou partie des fenêtres textuelle et graphique sont superposées, la couleur d'arrière-plan de la zone commune sera définie par la dernière commande d'effacement exécutée. Les textes sont affichés en fonction de la position du curseur texte et les dessins sont tracés en tenant compte du curseur graphique.
MODE 8 : REM - affiche et initialise une fenêtre de sortie
VDU 28 , 30 , 17 , 52 , 8 : REM - modifie la fenêtre textuelle
VDU 24 , 300 ; 250 ; 750 ; 900 ; : REM - modifie la fenêtre graphique
GCOL 129 : CLG : REM - efface et recolorise la fenêtre graphique
COLOUR 132 : CLS : REM - efface et recolorise la fenêtre textuelle
FOR ktest = 0 TO 127
COLOUR ktest
PRINT "BBC BASIC for SDL 2.0"
GCOL RND ( 16 )
LINE RND( 1280 ) , RND( 1024 ) , RND( 1280 ) , RND( 1024 )
WAIT( 25 )
NEXT ktest
END
Voir l'instruction MODE pour plus de détails sur les options disponibles pour la fenêtre de sortie.
Voir l'instruction VDU pour plus de détails sur les options de flux de sortie sélectionné.
GÉNÉRALITÉS.
Rappel : avec BBC BASIC SDL 2.0 une unité graphique corresponds en réalité à deux unités d'image, ou pixels. Par exemple, en MODE 8, la fenêtre de sortie a une surface graphique de 640 x 512 points soit une surface d'image de 1280 x 1024 pixels.
Dans BBC BASIC pour SDL 2.0, il existe deux types de couleurs :
- logiques, couleurs dont les composants RVB sont prédéfinis par la palette d'origine ;
- physiques, couleurs dont les composants RVB pourront être définis par le programme.
Pour sélectionner une couleur par défaut, modifier les composants RVB d'une couleur, indiquer le comportement d'une couleur avec une déjà présente lors d'un tracé, on utilisera les instructions COLOUR pour les textes ou GCOL pour les dessins. La forme et le nombre de paramètres utilisés avec ces instructions modifient grandement leur action.
Pour connaitre nombre de couleurs de la palette de la fenêtre de sortie active, on utilisera la variable système : @vdu.m.b& qui retourne le code d'appel de la dernière couleur de la palette, soit :
- 1 pour les palettes ayant 2 couleurs ;
- 3 pour les palettes ayant 4 couleurs ;
- 7 pour les palettes ayant 7 couleurs ;
- 15 pour les palettes ayant 16 couleurs ;
- 127 pour les palettes ayant 128 couleurs.
A noter cependant que le MODE 7 dispose d'une palette théorique de 8 couleurs, mais que seuls des textes en blanc sur fond noir pourront être affichés dans ce mode particulier.
Le nombre de couleurs disponibles dépend du mode d'affichage choisi, il y a :
- 2 couleurs logiques avec MODE 0, 4 et 32 ;
- 4 couleurs logiques avec MODE 1, 5 et 33 ;
- 16 couleurs logiques avec les autres modes ;
- 128 couleurs logiques avec les modes VDU 22 , 23.
Bien que MODE 7 (teletext) annonce 8 couleurs logiques, ce mode ne possède pas de palette de couleur. Seul l'affichage de textes en blanc sur fond noir sera autorisé avec ce mode.
Les codes couleurs inférieurs à 128 sont utilisée pour l'avant-plan (encre) et les codes couleurs supérieurs à 127 pour les couleurs d'arrière-plan (fond ou papier).
MODIFIER LA COULEUR PAR DÉFAUT.
En BBC BASIC SDL 2.0, les couleurs des textes et de graphiques sont indépendantes, aussi bien pour l'avant-plan (encre) ou l'arrière-plan (fond ou papier). L'instruction
- COLOUR couleur permet de modifier les couleurs d'affichage des textes ;
- GCOL couleur permet de modifier les couleurs d'affichage des dessins.
couleur est un nombre entier compris entre 0 et 255 indiquant le code de la nouvelle couleur par défaut. Si couleur est :
- inférieur à 128 (de 0 à 127), c'est la couleur d'avant-plan qui est modifiée ;
- supérieur à 127 (de 128 à 255), c'est la couleur d'arrière-plan qui est modifiée.
Si couleur est supérieur au nombre de couleurs de la palette : 2, 4 ou 16 selon le mode de la fenêtre de sortie, la couleur sélectionnée sera calculée comme suit, où max est le nombre de couleurs dans la palette (@vdu.m.b& + 1) :
- couleur MOD max si couleur est inférieur à 128 ;
- 128 + ( couleur MOD max ) si couleur est supérieur à 127.
MODE 8
FOR kcouleur = 0 TO 127
COLOUR kcouleur
COLOUR 255 - kcouleur
GCOL kcouleur
PRINT CHR$( 129 ) ;
RECTANGLE FILL ( kcouleur * 5 ) , 500 , 6 , 100
NEXT kcouleur
END
L'instruction CLS affacera son contenu, textuel et graphique, puis colorisera le fond de la surface textuelle de la couleur d'arrière-plan définie par COLOUR.
L'instruction CLG affacera son contenu, textuel et graphique, puis colorisera le fond de la surface textuelle de la couleur d'arrière-plan définie par GCOL.
Pour connaitre quelles sont les couleurs actuellement sélectionnées, on utilisera la variables système :
- @vdu.g.b&, qui retourne la couleur d'avant-plan pour les dessins, définie par GCOL ;
- @vdu.g.d&, qui retourne la couleur d'arrière-plan actuelle pour les dessins, définie par GCOL ;
- @vdu.t.c&, qui retourne la couleur d'avant-plan actuelle pour les textes, définie par COLOUR ;
- @vdu.t.d&, qui retourne la couleur d'arrière-plan actuelle pour les textes, définie par COLOUR.
MODE 8
REPEAT
COLOUR RND( 15 )
COLOUR 128 + RND( 15 )
GCOL RND( 15 )
GCOL 128 + RND( 15 )
CLS : CLG
CIRCLE FILL 640 , 512 , 150
WAIT( 20 )
PRINT "couleur de l'encre : " ; @vdu.t.c&
PRINT "couleur du papier : " ; @vdu.t.d&
PRINT "couleur des dessins : " ; @vdu.g.b&
PRINT "couleur du fond : " ; @vdu.g.d&
PRINT "Appuyer Q pour quitter ou sur une autre touche pour continuer."
kchoix$ = GET$
UNTIL kchoix$ = "Q" OR kchoix$ = "q"
END
En plus de définir la couleur par défaut des dessins à venir, l'instruction GCOL peut aussi indiquer s'il faut mélanger cette couleur avec celles déjà existantes sur les points à tracer, et la façon de le faire, avec la forme GCOL mode , couleur. Voir l'instruction GCOL pour plus de détails.
COLOUR couleur est un synonyme de VDU 17 , couleur.
ANALYSER LES COULEURS DE LA FENÊTRE DE SORTIE.
Pour connaitre la couleur d'avant-plan d'un point spécifique de la fenêtre de sortie aux coordonnées données en argument, on utilisera la fonction :
- POINT ( abscisse , ordonnee ) pour obtenir la valeur de la couleur logique ;
- TINT ( abscisse , ordonnee ) pour obtenir une valeur combinant les composants de la couleur physique.
Note : la fonction TINT() retourne une valeur décimale, qui faudra convertir en hexadécimal pour une meilleure exploitation et analyse des composants RVB de la valeur retournée.
REM --- Initialisation generale ---
MODE 8
kpoint = -1
REM --- Preparation de la fenetre de sortie ---
FOR kcouleur = 0 TO 127
GCOL kcouleur
RECTANGLE FILL ( kcouleur * 10 ) , 500 , 11 , 100
NEXT kcouleur
PRINT TAB( 25 , 18 ) "Deplacez le pointeur de la souris,"
PRINT TAB( 26 , 19 ) "pour connaitre un code couleur."
REM --- Boucle principale ---
REPEAT
MOUSE kabscisse , kordonnee , kbouton
IF kpoint <> POINT( kabscisse , kordonnee ) THEN
kpoint = POINT( kabscisse , kordonnee ) : REM --- releve la couleur logique
ktint = TINT( kabscisse , kordonnee ) : REM --- releve la couleur physique
khexa$ = "000000" + STR$~( ktint ) : REM --- convertie la valeur de la couleur physique
kcouleur$ = RIGHT$( khexa$ , 6 ) : REM --- formate la valeur de la couleur physique
PRINT TAB( 30 , 8 ) "Couleur logique : " ; kpoint ; ". "
PRINT TAB( 30 , 9 ) "Couleur physique : " ; kcouleur$ ; ". "
ENDIF
WAIT( 10 )
UNTIL FALSE
REM --- Fin du programme ---
END
MODIFIER LA PALETTE UTILE DES COULEURS LOGIQUES.
La forme COLOUR code , couleur permet de modifier la couleur logique associée au code de la palette utile. code et couleur doivent être des nombres entiers, compris entre 0 et 255, mais toute valeur supérieure au nombre de couleurs de la palette utile du MODE actif, sera recalculée par couleur MOD max, où max est le nombre maximum de couleurs dans la palette :
- code indique quel code de la palette utile devra changer ;
- couleur indique quel est la couleur de la palette d'origine qui devra être associée à code.
La valeur de couleur désigne toujours la couleur logique de la palette d'origine, même si COLOUR code , couleur a modifié la couleur logique associée à code dans la palette utile.
MODE 8
COLOUR 10 : PRINT "BBC BASIC" : REM - Affiche BBC BASIC en vert
COLOUR 13 : PRINT "BBC BASIC" : REM - Affiche BBC BASIC en fuchsia
GCOL 10 : RECTANGLE FILL 50 , 200 , 200 , 50 : REM - Affiche un rectangle vert
GCOL 13 : RECTANGLE FILL 300 , 200 , 200 , 50 : REM - Affiche un rectangle fuchsia
COLOUR 13 , 12 : REM - code 13 corresponds maintenant au code 12 de la palette d'origine
COLOUR 10 , 13 : REM - code 10 corresponds maintenant au code 13 de la palette d'origine
COLOUR 10 : PRINT "BBC BASIC" : REM - Affiche BBC BASIC en fuchsia
COLOUR 13 : PRINT "BBC BASIC" : REM - Affiche BBC BASIC en bleu
GCOL 10 : RECTANGLE FILL 50 , 100 , 200 , 50 : REM - Affiche un rectangle fuchsia
GCOL 13 : RECTANGLE FILL 300 , 100 , 200 , 50 : REM - Affiche un rectangle bleu
retourne
BBC BASIC BBC BASIC
BBC BASIC BBC BASIC
████████ ████████
████████ ████████
On remarque bien que :
- les changements de couleurs n'affectent pas les affichages précédents ;
- l'instruction GCOL tient compte des modifications de couleur liées aux codes de la palette utile,
- COLOUR 13 , 12 change la couleur 13 de la palette utile en fuchsia qui est la couleur 12 de la palette d'origine ;
- COLOUR 10 , 13 change la couleur 12 de la palette utile
- en bleu qui est la couleur 13 de la palette d'origine et ;
- et non en fuchsia qui est devenu la couleur 13 de la palette utile.
COLOUR code , couleur est un synonyme de VDU 19 , code , couleur , 0 , 0 , 0.
MODIFIER LES COMPOSANTS RVB DES COULEURS.
La forme COLOUR code , rouge , vert , bleu permet de modifier les composants RVB de la couleur physique associée au code de la palette utile. code, rouge, vert et bleu doivent être des nombres entiers, compris entre 0 et 255, mais toute valeur de code supérieure au nombre de couleurs de la palette utile du MODE actif, sera recalculée par code MOD max, où max est le nombre maximum de couleurs dans la palette :
- code indique quel code de la palette utile devra changer ;
- rouge indique la quantité de rouge que contiendra la couleur physique associée à code ;
- vert indique la quantité de vert que contiendra la couleur physique associée à code ;
- bleu indique la quantité de bleu que contiendra la couleur physique associée à code.
MODE 8
REPEAT
CLS : CLG
PRINT "Appuyez sur Q pour Quitter ou sur une autre"
PRINT "touche pour obtenir une autre palette aléatoire."
FOR kcouleur = 1 TO 15 : REM - A partir de 1 pour que la couleur du fond reste en noir
krouge = RND( 255 )
kvert = RND( 255 )
kbleu = RND( 255 )
COLOUR kcouleur , krouge , kvert , kbleu
COLOUR kcouleur : PRINT kcouleur ; " : " ; krouge ; " - " ; kvert ; " - " ; kbleu
GCOL kcouleur : RECTANGLE FILL 60 , ( 930 - ( kcouleur * 32 ) ) , 50 , 31
NEXT kcouleur
kpause$ = GET$
UNTIL kpause$ = "Q" OR kpause$ = "q"
PRINT TAB( 0 , 27 ) "Fin du test; Au revoir."
END
COLOUR couleur , rouge , vert , bleu est un synonyme de VDU 19 , couleur , 16 , rouge , vert , bleu.
MODIFIER LA TRANSPARENCE D'UNE COULEUR.
La commande VDU 19 , logique , alpha , 0 , 0 , 0 permet de modifier le canal Alpha, c'est-à-dire la transparence, de la couleur de la palette utile ayant pour code logique - 128. logique doit être compris entre 128 et 143, est indique quel code, égale à logique - 128, de la palette utile sera modifier. alpha indique le niveau de transparence et doit être compris entre 0, pour une transparent total de la couleur et 255 pour opacité complète.
MODE 8
COLOUR 3
PRINT TAB( 10 , 12 ) ;
FOR kalpha = 0 TO 255 STEP 5
VDU 19 , ( 128 + 3 ) , kalpha , 0 , 0 , 0 : REM - la forme (128 + 3) permet d'identifier rapidement la couleur
PRINT CHR$( 129 ) ;
NEXT kalpha
END
RUBRIQUES.
Les dessins et les graphismes pour plus de détails les fonctions de dessins du BBC BASIC.
L'affichage des textes pour plus de détails sur les fonctions d'affichage de texte.
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de
Dans la RETROGICIEL vous trouvez des suggestions simples et classiques pour
TESTER - DÉCOUVRIR - PRATIQUER - APPROFONDIR - EXPLORER
avec un exemple de résolution à télécharger pour vous inspirer.