Page 1 sur 1

Calculer composante Rouge, Verte, Bleu, Alpha d'une couleur

Publié : ven. 31/oct./2014 15:04
par Lord Nelson
Salut,

Petite astuce pour calculer à la main, la composante Rouge, Verte, Bleu, Alpha d'une couleur:

Code : Tout sélectionner

Couleur = RGBA(53, 251, 4, 3)
Debug Couleur

Debug 255 & Couleur ; Rouge
Debug (65280 & Couleur) / 256 ; Vert ( 255 + (255 * 255) = 65 280 )
Debug (16711680 & Couleur) / 65536 ; Bleu ( 255 + (255 * 255) = 65280 * 256 = 16 711 680 )
Debug (4278190080 & Couleur) / 16777216 ; Alpha ( 255 + (255 * 255) = 65280 * 256 = 16 711 680 * 256 = 4 278 190 080 )

Re: Calculer composante Rouge, Verte, Bleu, Alpha d'une coul

Publié : ven. 31/oct./2014 15:10
par majikeyric
Les fonctions Red(),Green(),Blue() et Alpha() font la même chose :wink:

Re: Calculer composante Rouge, Verte, Bleu, Alpha d'une coul

Publié : ven. 31/oct./2014 15:26
par nico
Plus simple ainsi:

Code : Tout sélectionner

Structure RGBA
  rgbRed.a
  rgbGreen.a
  rgbBlue.a
  rgbalpha.a
EndStructure

Couleur.l = RGBA(255, 254, 253, 255)
*Pointer.RGBA = @couleur

Debug *Pointer\rgbRed
Debug *Pointer\rgbGreen
Debug *Pointer\rgbBlue
Debug *Pointer\rgbalpha

Re: Calculer composante Rouge, Verte, Bleu, Alpha d'une coul

Publié : ven. 31/oct./2014 16:06
par Lord Nelson
Merci Nico :)

Plus simple mais moi je comprends pas :oops:

Ont dis que les choses les plus simples sont les meilleurs mais se qu'ont ne dis pas
C'est que les choses les plus simples sont les plus dur à comprendre :mrgreen:

Re: Calculer composante Rouge, Verte, Bleu, Alpha d'une coul

Publié : ven. 31/oct./2014 16:08
par Lord Nelson
@majikeyric
Les fonctions Red(),Green(),Blue() et Alpha() font la même chose :wink:
Tu sais, c'est bien d'utiliser des fonctions mais le jour ou tu veux les reproduire tu fais
comment si tu sais pas comment elle fonctionne hein :mrgreen:

Re: Calculer composante Rouge, Verte, Bleu, Alpha d'une coul

Publié : lun. 03/nov./2014 9:42
par djes
Merci pour ton astuce, cependant, il faut éviter de l'utiliser pour deux raisons :
  • Les divisions sont parmi les opérations les plus lentes sur un microprocesseur. Cela ne se voit pas sur un seul pixel, mais quand tu en as des millions, cela fait une grosse différence. Il vaut mieux (au pire), utiliser un décalage avec les opérateurs << et >>
  • Les composantes rouge vert et bleu ne sont pas toujours dans le bon ordre. Il y a des cartes graphiques ou des systèmes où les valeurs sont codées BGR par exemple. Du coup ton code ne fonctionne plus. Le mieux est d'utiliser les opérations Purebasic Red(), Green(), Blue() et Alpha() pour être le plus compatible possible. Si on veut être plus rapide, il vaut mieux utiliser le code de nico.

Re: Calculer composante Rouge, Verte, Bleu, Alpha d'une coul

Publié : lun. 03/nov./2014 11:31
par Lord Nelson
Merci pour l'info ;)

Re: Calculer composante Rouge, Verte, Bleu, Alpha d'une coul

Publié : lun. 03/nov./2014 19:45
par GallyHC
Bonjour,

Au vu du code et juste pour refaire une simple remise en forme de celui-ci (car vu ce code en Vb6 des milliers de fois et toujours présenter de façon "plus propre") et cela donne :

Code : Tout sélectionner

EnableExplicit

Define.i icolor
Define.l lR, lG, lB, lA

icolor = RGBA(53, 251, 4, 3)

lR = (icolor & $FF      )
lG = (icolor & $FF00    ) / $100
lB = (icolor & $FF0000  ) / $10000
lA = (icolor & $FF000000) / $1000000

Debug lR
Debug lG
Debug lB
Debug lA
Je préfère cette présentation perso (question de gout) et c'est pour cela que je poste.

Cordialement,
GallyHC

Re: Calculer composante Rouge, Verte, Bleu, Alpha d'une coul

Publié : lun. 03/nov./2014 21:24
par majikeyric

Code : Tout sélectionner

EnableExplicit

Define.i icolor
Define.l lR, lG, lB, lA

icolor = RGBA(53, 251, 4, 3)

lR = (icolor & $FF      )
lG = (icolor & $FF00    ) >> 8
lB = (icolor & $FF0000  ) >> 16
lA = (icolor & $FF000000) >> 24

Debug lR
Debug lG
Debug lB
Debug lA

Re: Calculer composante Rouge, Verte, Bleu, Alpha d'une coul

Publié : mar. 04/nov./2014 8:01
par GallyHC
Bonjour,

majikeyric > j'ai été trop rapide pour la conversion, merci pour avoir bien modifier ^^.

GallyHC