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

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

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

Message 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 )
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

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

Message par majikeyric »

Les fonctions Red(),Green(),Blue() et Alpha() font la même chose :wink:
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

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

Message 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
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

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

Message 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:
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

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

Message 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:
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

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

Message 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.
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

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

Message par Lord Nelson »

Merci pour l'info ;)
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

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

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

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

Message 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
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

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

Message par GallyHC »

Bonjour,

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

GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre