Cet article explique comment les couleurs sont gérées dans le language Microsoft Small Basic. Il y a deux types de couleurs. Un pour la fenêtre texte (TextWindow), l'autre pour la fenêtre graphique (GraphicsWindow).



Les couleurs dans la fenêtre graphique

Vue d'ensemble

Vous pouvez définir les couleurs de trois manières dans Small Basic :

  1. Utiliser les noms de couleurs prédéfinies (par ex. GraphicsWindow.BrushColor = "Red")
  2. Utiliser un code de valeur Hexa (par ex. GraphicsWindows.BrushColor = "#FF0000")
  3. Définir les composantes Rouge (Red), Verte (Green) et Blue (Blue) plus connues sour l'acronyme RVB soit RGB en anglais (par ex. GraphicsWindows.BrushColor = GraphicsWindow.GetColorFromRGB(255,0,0))

Les trois exemples ci-dessus sont équivalent (ils indiquent tous une couleur Rouge). Noter comment l'exemple Hexa utilise 3 valeurs hexadécimal correspondant aux composantes Rouge, Vert, Bleu : FF(R), 00 (G) et 00(B), ce qui correspond en décimal à 255(R), 0(G) et 0(B). Le symbole # est nécessaire et est le symbole standard indiquant que les caractères qui suivent représentent une valeur hexadécimale.

The Guide de Démarrage du Small Basic liste tous les noms des couleurs disponibles, avec leur correspondances en valeur hexadécimale. Small Basic Getting Started Guide: Appendix B: Colors (en-US) vous trouverez l'annexe B a la fin du document dans la version française.

Voici par exemple les couleurs de teinte rouge.

Vous pouvez également ajouter la transparence en utilisant la méthode Hexa en ajoutant une valeur hexadécimale supplémentaire pour l'opacité (00 est totalement transparent, et FF est totalement opaque) on utilise la forme ARGB au lieu de RGB où A désigne le canal Alpha c'est-à-dire la transparence.

Par exemple "#80FF0000" est un Rouge transparent à 50% (80).

GraphicsWindow.DrawText(50,50, "Hello World" )
GraphicsWindow. BrushColor = "#80FF0000"
ellipse = Shapes.AddEllipse(90,35)
Shapes.Move(ellipse,40,40)

Exemple TSL (HSL en anglais)

Une autre manière de décrire une couleur et d'utiliser le modèle TSL, pour Teinte, Saturation et Luminosité. En anglais HSL, pour Hue, Saturation, Lightness.

  • La Teinte est la couleur (de 0 à 360) correspondant aux degrés d'un cercle, où Teinte 0 correspont à Teinte 360 (Rouge).
  • La Saturation est l'intensité de la couleur (de 0 à 1) qui va de gris à clair.
  • La Luminosité (de 0 à 1) qui va du noir a blanc.

 Teinte

 Saturation

 Luminosité

Le code suivant converti des valeurs HSL en RGB, et affiche les Teintes disponibles (de 0 à 360) à une Saturation maximum (1) et une Luminosité moyenne (0.5).

GraphicsWindow. Width = 360
GraphicsWindow. Height = 100
 
For H = 0 To 360
   S = 1
   L = 0.5
  HSL2RGB()
  GraphicsWIndow. PenColor = GraphicsWindow.GetColorFromRGB(R,G,B)
  GraphicsWindow.DrawLine(H,0,H,100)
EndFor
 
Sub HSL2RGB
  'Check Limits
   While (H < 0)
     H = H+360
  EndWhile
   While (H > = 360)
     H = H-360
  EndWhile
   S = Math.Max(0,Math.Min(1,S))
   L = Math.Max(0,Math.Min(1,L))
  
   C = (1-Math.Abs(2*L-1))*S
   H2 = H/60
   X = C*(1-Math.Abs(Math.Remainder(H2,2)-1))
   If (H2 >= 0 And H2 < 1 ) Then
     R = C
     G = X
     B = 0
   ElseIf (H2 >= 1 And H2 < 2 ) Then
     R = X
     G = C
     B = 0
   ElseIf (H2 >= 2 And H2 < 3 ) Then
     R = 0
     G = C
     B = X
   ElseIf (H2 >= 3 And H2 < 4 ) Then
     R = 0
     G = X
     B = C
   ElseIf (H2 >= 4 And H2 < 5 ) Then
     R = X
     G = 0
     B = C
   ElseIf (H2 >= 5 And H2 < 6 ) Then
     R = C
     G = 0
     B = X
  Else
     R = 0
     G = 0
     B = 0
  EndIf
   M = L-C/2
   R = 255*(R+M)
   G = 255*(G+M)
   B = 255*(B+M)
EndSub

Références Couleur de la fenêtre graphique

Propriétés de Couleur

  • GraphicsWindow.BackgroundColor est la couleur du fond de la fenêtre.
  • GraphicsWindow.BrushColor est la couleur du texte et de remplissage des formes.
  • GraphicsWindow.PenColor est la couleur des traits des formes.

Méthodes de Couleur

  • GraphicsWindow.GetColorFromRGB() créé une couleur partir de ces valeurs rouge, verte et bleue. Voir Couleur à partir de RVB pour plus de détails.
  • GraphicsWindow.GetRandomColor() permet d'obtenir une couleur aléatoire.

Pixel

Un Pixel est un point dans la fenêtre graphique. Vous pouvez obtenir ou définir un pixel de la manière suivante.

GraphicsWindow.SetPixel(1010"Red")
color GraphicsWindow.GetPixel(1010)

Avec le code ci-dessus vous obtenez "#FF0000" la variable 'color'. "#FF0000" correspond à la couleur "Red". Soyez attentif au fait que GetPixel() ne retourne pas la couleur BackgroundColor. En d'autres termes GetPixel retourne la couleur qui se trouve dans la couche dessin. Et si toutefois il n'y a aucun dessin alors GetPixel retourne "#000000".

Couleurs Nommées (140 Couleurs)

L'annexe B a la fin du document dans la version française ou ( Small Basic Getting Started Guide: Appendix B: Colors (en-US) contient le nom des 140 couleurs depuis "IndianRed" jusqu'a "Black". Le nom des Couleurs ne sont pas sensibles à la casse. Donc, "IndianRed" et "indianred" sont la même couleur. Actuellements les couleurs sont 138 dans la table car les couleurs "Fuchsia" et "Magenta" sont les mêmes ainsi que "Aqua" et "Cyan".

Les couleurs avec un nom incorrect deviennent "Black".

Couleur à partir de RVB

RVG indique les intensités de rouge, vert et bleu de la couleur. La valeur d'intensité va de 0 à 255. Vous pouvez obtenir la valeur d'une couleur depuis les valeurs RVB de la manière suivante.

255
128
0
color GraphicsWindow.GetColorFromRGB(rgb)

Avec ce code, on obtient "FF8000" dans la variable 'color'. Il s'agit de la valeur de la couleur au format "#rrvvbb". rr indiquant la valeur hexadécimale pour le rouge, vv pour le vert, et bb pour le bleu.

Transparent

Le nom spécial "Transparent" est autorisé pour les propriétés GraphicsWindow.BrushColor et GraphicsWindow.PenColor. Mais vous ne pouvez pas obtenir la couleur transparente depuis ces propriétés.

Alpha Blending (Simulation de Transparence)

Les couleurs de valeur comme "#80FF0000" sont permises. Ce format de de couleur "#aarrvvbb" à une partie aa qui indique la part de transparence ou Canal Alpha. Pour aa, 00 indique une transparence complète, FF indique une opacité complète.

Si vous exécutez votre programme dans l'EDI Small Basic, vous pouvez obtenir la couleur "#rrggbb" avec la méthode GraphicsWindow.GetPixel, mais si vous exécutez votre programme avec smallbasic.com/program/?<id>, vous obtiendrez une couleur "#FFrrggbb" avec GraphicsWindow.GetPixel. Ce comportement est décrit en détail dans cet article en anglais.

Opacité

Pour les Formes (Shapes), vous pouvez définir l'opacité de la format. La valeur de l'opacité va de 0 à 100. 0 indique une transparence complète, 100 une opacité complète.

Shapes.SetOpacity(shapeopacity)

Shapes.GetOpacity ne fonctionne par correctement. Ce comportement est décrit cet article en anglais.

Code d'Exemple - Couleurs avec GraphicsWindow

ID Programme : QSC915 montre une démonstration sur les propriétés de couleurs de GraphicsWindow.

ID Programme : JWS691-0 affiche un exemple de mélange de couleur. Dans ce programme, l'opération 'Add' opère un mélange de couleur additive, l'opération 'Mix' opère un mélange de couleur soustractive. Les couleurs Additives permette le mélange de couleurs de lumière, tandis que les couleurs Soustractives permettent le mélange des encres.

ID Programme : CKK055 recherche le nom de la couleur la plus approchante d'une couleur RVG fournie.

ID Programme: VFP128-1 est un exemple de remplissage d'un rectangle avec un dégradé. Cet exemple créé une couleur dégradée.

Couleurs dans la fenêtre de texte

Propriétés de Couleur

Avec TextWindow, vous pouvez changer la couleur du texte (couleur foreground) et celle du fond. Vous pouvez définir les couleurs avec leur nom ou leur index, comme l'exemple suivant.

TextWindow. ForegroundColor = "Red"
TextWindow. BackgroundColor = 1

ForegroundColor ne fonctionne qu'avec l'environnement EDI Small Basic.

16 Couleurs

Il y a 16 couleurs nommées pour TextWindow. Attention, les mêmes noms de couleur pour TextWindow et GraphicsWindow ne correspondent pas aux mêmes couleurs. Par exemple la couleur "Green" pour TextWindow correspond à la couleur "Lime" pour GraphicsWindow. Et "DarkGreen" pour TextWindow est la même que "Green" pour GraphicsWindow. Les noms de couleurs ne sont pas sensibles à la casse. Donc, les couleurs "DarkGray" et "darkgray" sont les mêmes.

Les noms de couleurs incorrects sont ignorés. Dans ce cas, les couleurs de texte et de fond courantes sont conservées. Les couleurs de fond invalides deviennent "Black" dans le site web smallbasic.com/program/?<id>.

Exemple de Code - Couleurs dans TextWindow

ID Programme QLJ036 montre comment utiliser TextWindow.ForegroundColor et TextWindow.BackgroundColor. Ce programme s'exécute correctement dans l'EDI Small Basic.


Voir Aussi

Autres Ressources

Autres Langues