ColorToPRGB

Convertit le type color en type uint pour obtenir une représentation ARGB prémultipliée de la couleur - PRGB. Le format de couleurPRGB est utilisé lors de la création de ressource graphique, sortie de texte et dans la classe de bibliothèque standard CCanvas avec le format de couleur COLOR_FORMAT_ARGB_RAW (les composants ne sont pas traités par le terminal et doivent être correctement préparé par l'utilisateur).

uint  ColorToPRGB(
   color  clr,          // couleur convertie au format couleur 
   uchar  alpha=255     // canal alpha qui contrôle la transparence des couleurs 
   );

Paramètres

clr

[in] Valeur de la couleur dans une variable de type color.

alpha

[in] Valeur du canal alpha, pour obtenir la couleur au format ARVB. Les valeurs possibles vont de 0 (la couleur du pixel superposé ne change pas du tout l'affichage du pixel sous-jacent) à 255 (la couleur est complètement superposée et chevauche la couleur du pixel sous-jacent). La transparence des couleurs en termes de pourcentage est calculée comme suit : (1 - alpha / 255) * 100%, c'est-à-dire que plus la valeur du canal alpha est faible, plus la couleur est transparente.

Valeur de retour

Représentation des couleurs au format ARGB, où 4 octets de type uint contiennent les valeurs Alfa, Red, Green, Blue (canal alpha, rouge, vert, bleu).

Note

En quoi le PRGB diffère-t-il de l’ARGB ?

Il existe deux représentations courantes de la couleur RGBA avec un canal alpha :

  • ARVB "droit" (normal) - RVB est stocké "tel quel", alpha est séparé ;
  • prémultiplié (PRGB) - RVB est déjà multiplié par alpha.

Le mode COLOR_FORMAT_ARGB_RAW suppose que les composantes de couleur sont déjà correctement préparées et que le terminal ne les "normalise/recalcule" pas. Par conséquent, dans les scénarios où une couleur prémultipliée est attendue, c'est PRGB qui doit être transmis, sinon des artefacts visuels/incohérences pendant le rendu peuvent se produire.

La couleur PRGB est calculée par la formule :

R = R * A / 255

G = G * A / 255

B = B * A / 255

A = A 

Cas particuliers :

  • lorsque alpha = 255, le résultat coïncide avec ColorToARGB(clr,255) (la multiplication ne change pas RVB) ;
  • lorsque alpha = 0, le résultat devient 0x00000000 (pixel entièrement transparent, RVB = 0).

Exemple :

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   uchar alpha = 0x55// 0x55 = 85; transparency ~ (255-85)/255 * 100% = 66.7%
   color c = clrWhite;
 
   PrintFormat("0x%%.8X - %s"cColorToString(c,true));
   PrintFormat("0x%.8X - ARGB (straight)"ColorToARGB(calpha));
   PrintFormat("0x%.8X - PRGB (premultiplied)"ColorToPRGB(calpha));
   /*
   0x00FFFFFF - clrWhite
   0x55FFFFFF - ARGB (straight)
   0x55555555 - PRGB (premultiplied)
   */
}

Voir aussi

Ressources, ColorToARGB, ResourceCreate(), TextOut(), Color type, Types char, short, int et long