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 :

(Transparence × 224) + (Rouge × 216) + (Vert × 28) + Bleu

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 :
wColor avec Windows

wColor avec Windows


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… ;)

wColor avec Mac OS X

wColor avec Mac OS X

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 :

Formule pour l'encodage de la couleur

Formule pour l'encodage de la couleur

  • 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.

Développé en Delphi

Share

Lien permanent vers wColor Rédigé par Whiler \\ Tags : , , , , ,

Une réponse pour “wColor”

  1. Whiler a dit :

    Version 1.2.2.4 :

    • Ajout d’une fenêtre À propos de…

    Répondre

Laisser une réponse

(requis)

(requis)

*

Notifiez-moi les commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.

;) (lol) (y) |-( (hi) 8-) (angel) :s (clap) (bow) (tmi) (:| plus »