Mar
13
|
En écrivant un commentaire concernant une mise à jour de l’application wMJPG Viewer, j’ai sommairement expliqué comment calculer la valeur en base décimale attendue par Delphi :
Chaque valeur est comprise entre 0 et 255 inclus. Les plus aguerris auront reconnu la taille d’un octetW, ou des valeurs hexadécimales allant de 0 à FF ,et l’utilisation de 4 octets dans la formule ci-dessus.
Historiquement, avec la VCLW, bibliothèque conçue pour développer plus rapidement des applications pour Windows, le codage des couleurs en Delphi est basé sur RVBW. Il ne fallait donc que 3 octets. Avec FireMonkey, le canal alphaW a été ajouté, permettant ainsi de jouer plus facilement sur la transparence.
Concernant les constantes des couleurs prédéfinies dans Delphi, on distinguera facilement celles qui ont cet octet supplémentaire via leur préfixe :
Octets | Préfixe | Codage | Exemple |
---|---|---|---|
3 | cl | RVB | clYellow ($00FFFF) |
4 | cla | ARVB | claYellow ($FF00FFFF) |
wColor permet d’obtenir facilement les différentes valeurs liées à une couleur :
L’application est disponible pour :
Vous pouvez choisir une couleur depuis le nuancier de la partie gauche ou en saisissant n’importe quelle(s) valeur(s) de la partie de droite. Une case à cocher permet de spécifier si l’on souhaite les couleurs avec leur couche alpha ou pas.
Le code cette application est très simple. Cependant, étant donné qu’il est multi-plateformes, je nai pas eu envie d’utiliser l’unité de Winapi.Windows
pour obtenir les valeurs du rouge, du vert et du bleu :
GetRValue, GetGValue, GetBValue
En regardant de plus près les unités disponibles, j’ai trouvé ce record, TAlphaColorRec
qui faisait ce dont j’avais besoin :
1 2 3 4 5 6 7 8 9 10 11 12 | procedure TfrmMain.GetARGB(color: TColor; out a, r, g, b: Byte); begin // a := TAlphaColorRec(color).A; // r := TAlphaColorRec(color).R; // g := TAlphaColorRec(color).G; // b := TAlphaColorRec(color).B; a := (color shr 24) and $FF; r := (color shr 16) and $FF; g := (color shr 8) and $FF; b := color and $FF; end; |
Au final, afin d’optimiser, j’aime autant faire des décalages d’octet…
Si vous êtes allé vérifier le commentaire, vous aurez remarqué que je n’avais pas exactement écrit la formule du début de cet article… Allez, juste pour me faire plaisir, je mets une jolie formule mathématique :
- Un bit vaut soit 0, soit 1, donc il a 2 valeurs possibles.
- Un octet est composé de 8 bits, soit 23.
- Une couleur avec transparence est composée de 4 octets, écrits côte à côte, et donc décalés par le multiple que l’on voit sur les deux dernières lignes. Le bleu n’ayant pas besoin d’être décalé, c’est pourquoi il a un multiple de 0.
Application développée avec Embarcadero Delphi XE2.

Version 1.2.2.4 :