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

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

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

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

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