Revenir au sommaire Tutoriaux

 


Canvas Couleur Pixel Palette
Programmation des couleurs
Bitmaps
Scanlines
Masques Conclusion Références


Canvas Couleurs Pixels Palette

Canvas d'affichage

Delphi affiche les images sur un Canvas (canevas). Un canvas est une amélioration notable du Contexte de Dispositif de Windows (Device Context ou DC). Pour simplifier, on peut dire qu'un Contexte de Dispositif est une surface de dessin soit pour l'écran, soit pour l'imprimante, soit en mémoire.

Chaque Canvas donne accès au Handle du Contexte de Dispositif. Un handle est un nombre fourni par Windows qui représente un objet Windows. On peut ausi considérer un handle comme une ressource windows. Un handle permet sous Delphi d'utiliser les fonctions GDI (Graphic Device Interface) lorsqu'une telle fonction n'existe pas dans Delphi.

Toute la lourde mécanique consistant à allouer et désallouer un Device Context, à sélectionner un objet en mémorisant l'ancien (par exemple un pinceau) puis à le supprimer en rétablissant l'ancien à chaque utilisation est heureusement transparente et optimisée grâce à Delphi .

Exemples de Canvas utilisés en Delphi
Imprimante : TPrinter.canvas
Paintbox : Tpaintbox.canvas
Image : Timage.canvas
Bitmap : Tbitmap.canvas


Couleurs RGB

Chaque couleur est séparée en 3 couleurs fondamentales Rouge (Red) Vert (Green) et Bleu (Blue) que l'on appelle communément RGB. Chaque couleur occupe un octet (byte) et son intervalle va de 0 à 255, ce qui donne avec 24 bits 2^24 = 16 777 216 combinaisons de couleurs.

Exemples

Couleur ........

R

G

B

Noir

0

0

0

Gris foncé 127 127 127
Blanc 255 255 255
Rouge pur 255

0

0

Rose 255 200 200


Type Tcolor

type TColor = -(COLOR_ENDCOLORS + 1)..$02FFFFFF;

Pour gérer lescouleurs, Delphi utilise le format Tcolor , qui comporte 4 octets et correspond à la structure RGBQUAD de l'API Windows.

BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;

En effet, au lieu d'utiliser seulement les 3 octets nécessaires (RGBTRIPLE) il est plus performant de manipuler de entités de 32 bits que les 24 bits qui ne sont pas multiples de mot (16 bits ou 32 bits).
Voir l'aide en ligne pour l'utilisation de l'octet rgbReserved


Rappel sur la notation hexadécimale

Les trois premiers octets représentent respectivement l'intensité RGB des couleurs bleu, vert et rouge.
La valeur $00FF0000 représente un bleu pur de pleine intensité, $0000FF00, un vert pur de pleine intensité et $000000FF, un rouge pur de pleine intensité. $00000000 représente le noir et $00FFFFFF, le blanc.

Si l'octet de poids fort vaut zéro (00), la couleur obtenue est celle la plus approchante dans la palette système. Si l'octet de poids fort vaut un (01), la couleur obtenue est celle la plus approchante dans la palette actuellement réalisée. Si l'octet de poids fort vaut deux (02), la couleur obtenue est celle la plus approchante dans la palette logique du contexte de périphérique en cours.


Couleurs HSV

Une autre manière de représenter les couleurs est le système HSV (Hue Saturation Value). Ce codage des couleurs est plus naturel que le codage RGB. HSV, mais il utilise en principe des valeurs non entières (décimales). En conséquence il nécessite plus de place pour le stockage

Hue représente la teinte, qui est codée de 0° à 360° pour représenter les couleurs de l'arc en ciel.

Saturation représente la pureté de la couleur (de 0.0 niveau de gris à 1.0 couleur pure)

Value représente l'intensité (de 0.0 noir à 1.0 blanc).

La boite de dialogue standard de Windows (Tcolordialog) est une des représentations possibles des couleurs avec le codage HSV : le rectangle de couleurs montre les combinaisons Hue par Saturation et l'ascenseur de droite représente l'intensité (Value) de la couleur sélectionnée.


Pixels

Le plus petit élément d'un canvas est le pixel, c'est à dire un point. Pour l'affichage (Tform.canvas, Tpaintbox.canvas ou TImage.canvas), il est évident que selon le nombre de couleurs supportées par l'écran déterminera la place prise pour mémoriser les pixels. Voir aussi le tableau Bitmap - Pixelformat

Couleurs

bits

Monochrome 1
16 4
256 6
32 768 16 dont 15 utiles
65 536 16
16 millions 24 true color
16 millions+ 32 real color


Palettes

De 2 à 256 couleurs, Windows utilise une Palette pour améliorer le rendu des couleurs à l'écran. En effet, plusieurs fenêtres peuvent être affichées simultanément et chaque fenêtre peut avoir des palettes différentes. On imagine la complexité des adaptations effectuées par Windows pour afficher simultanément des palettes différentes. Il faut aussi savoir qu'en 256 couleurs Windows préfère nettement des palettes dont les 10 premières et les 10 dernières couleurs sont des couleurs dites "Couleurs système windows" : il s'agit des 16 couleurs pures plus les 4 couleurs suivantes:

Nom anglais

.......

Traduction

Rang dans
la palette

Hexadécimal

RGB

clMoneyGreen

Vert Dollar

8

$C0DCC0

192 220 192

clSkyBlue

Bleu ciel

9

$F0CAA6

166 202 240

clCream

Crème

246

$F0FBFF

255 251 240

clMediumGray

Gris moyen

247

$A4A0A0

160 160 164

La conséquence de cette complexité des palettes et de leur encapsulation dans Delphi, est qu'il vaut mieux éviter de travailler avec des palettes. Nous choisirons donc par la suite le format de couleurs 24 bits, ce qui correspond aux résolutions d'écran supportées par les PC actuels.
De plus, le format de fichiers le plus utilisé sur internet, est le format JPEG qui utilise 16 millions de couleurs.

 

suite

Revenir au sommaire Tutoriaux