Petite explication:
Une couleur RGB est codée sur 24 bits dans une variable de 32 bits comme suit
Code : Tout sélectionner
; Exemple du'une couleur R(255)G(32)B(64)
; 00000000 01000000 00100000 11111111
; Non utilisé Blue(64) Green(32) Red(255)
;
; Soit en hexadécimal
; $4020FF
Voici maintenant la même couleur en RGBA
Code : Tout sélectionner
; Exemple du'une couleur A(255) R(255)G(32)B(64)
; 11111111 01000000 00100000 11111111
; Alpha(255) Blue(64) Green(32) Red(255)
;
; Soit en hexadécimal
; $FF4020FF
L'astuce consiste donc juste à modifier les 8 bits de poids fort (à gauche) avec la valeur alpha de son choix sans modifié les autres bits.Pour cela on utilise un opérateur OR | et une masque logique en hexadécimal par soucis de facilité
Code : Tout sélectionner
$ValeurAlpha000000 ; Masque logique
; La valeur du canal alpha souhaitée sur 8 bits ex: $FF 255,$80 128 etc
; suivie de six zéros pour ne pas modifiée les 24 bits de couleur
Code : Tout sélectionner
Define Color.l=$3030FF ; couleur sans la valeur alpha
OpenWindow(0,0,0,800,600,"teste",$cb0001)
CanvasGadget(0,0,0,800,600)
StartVectorDrawing(CanvasVectorOutput(0))
; Ici cela ne fonctionera pas car pas de canal alpha
VectorSourceColor(Color)
AddPathBox(0,0,200,600)
FillPath()
; Ici je place la valeur 255 dans les 8 bits de poids fort (Valeur Alpha)
; je ne modifie par contre pas les 24 bits suivants
VectorSourceColor(Color|$FF000000)
AddPathBox(200,0,200,600)
FillPath()
; Ici je place la valeur 128 dans les 8 bits de poids fort (Valeur Alpha)
; je ne modifie par contre pas les 24 bits suivants
VectorSourceColor(Color|$80000000)
AddPathBox(400,0,200,600)
FillPath()
; Ici je place la valeur 64 dans les 8 bits de poids fort (Valeur Alpha)
; je ne modifie par contre pas les 24 bits suivants
VectorSourceColor(Color|$40000000)
AddPathBox(600,0,200,600)
FillPath()
StopVectorDrawing()
Repeat:WaitWindowEvent():Until Event()=#PB_Event_CloseWindow