Page 1 sur 1

BGR

Publié : dim. 13/nov./2005 9:46
par Anonyme2
Voici 2 petites procedures asm sans prétention pour transformer une couleur en BGR, c'est-à dire quelle inverse les composantes rouge et bleue

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()

Publié : dim. 13/nov./2005 10:25
par lionel_om
J'vais regarder ça.
L'ASM m'intéresse en ce moment...

Publié : dim. 13/nov./2005 14:13
par Dr. Dri
...

Publié : dim. 13/nov./2005 14:24
par Anonyme2
C'est juste une sécurité au cas ou l'on passe une valeur > à 24 bit (c'est le cas de l'API GetDIBits sous Win98 qui met l'octet de poids fort à FF dans certains cas alors que sous XP non :roll: )

SHR met bien les bit entrant à 0 mais le AND a lieu avant l'inversion BSWAP

Publié : dim. 13/nov./2005 14:48
par Dr. Dri
...

Publié : dim. 13/nov./2005 14:57
par Anonyme2
T'as raison, Dri,
inutile dans le code pour BGR et BGR_Ex

je modifie l'original (c'est extrait de mon code ou j'utilisais la couleur avant de l'inverser et j'ai passé du temps pour trouver le problème)

Publié : dim. 13/nov./2005 14:59
par Dr. Dri
...

Publié : dim. 13/nov./2005 15:27
par Anonyme2
Oui oui