la procedure BGR(couleur) retourne la valeur convertie
la procedure BGR_Ex(Addcouleur) ne retourne pas de valeur mais modifie directement la variable en mémoire
On peut très bien le faire avec les fonctions rgb() et red(), blue() et green()
voici les 2 petites procedures et un petit exemple, n'oubliez pas d'activer l'assembleur en ligne
Procedure.l BGR(Couleur.l)
; Couleur est une couleur sur 24 bits (ColorRef)
; la fonction inverse les composantes rouge et bleue
MOV eax, Couleur
BSWAP eax
SHR eax, 8
MOV Couleur, eax
ProcedureReturn Couleur
EndProcedure
Procedure BGR_Ex(AddCouleur.l)
; AddCouleur est l'adresse de la variable contenant la couleur (couleur sur 24 bits (ColorRef))
; la fonction inverse les composantes rouge et bleue directement en mémoire
; elle ne retourne pas de valeur
MOV eax, AddCouleur
MOV edx, [eax]
BSWAP edx
SHR edx, 8
MOV [eax], edx
EndProcedure
Procedure essai()
color = $00FFAA11 ; BGR(color) doit retourner $0011AAFF
; BGR(color1) modifie directement color1 avec la valeur $0011AAFF
color1 = color
BGR_Ex(@color1)
MessageRequester ( "BGR et BGR_Ex" , "color = $" + Hex (color)+ Chr (10)+ Chr (10)+ "BGR(color) = $" + Hex (BGR(color))+ Chr (10)+ Chr (10)+ "BGR_Ex(@color1) : $" + Hex (color1),16)
EndProcedure
essai()