COULEUR HEXADECIMAL

Messages postés
41
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
18 octobre 2011
- - Dernière réponse : FrancisFaure
Messages postés
41
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
18 octobre 2011
- 18 mai 2006 à 19:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36333-couleur-hexadecimal

Afficher la suite 
FrancisFaure
Messages postés
41
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
18 octobre 2011
-
Puis je te proposer une version sans l'appel api :

* Code hexa en décimal
C_color = "FF00FF"
r = evaluate("0x"+substr(c_Color,1,2))
v = evaluate("0x"+substr(c_Color,3,2))
b = evaluate("0x"+substr(c_Color,5,2))
? r,v,b

* code décimal en hexa :
? right(TRANSFORM(r*256^2 + v*256 + b, "@0"),6)

Cordialement
Francis
tmcuh
Messages postés
463
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
18 avril 2009
-
Merci pour cette proposition mais en testant celà pose un problème :

c_color = "D1010E"
r = evaluate("0x"+substr(c_Color,1,2))
g = evaluate("0x"+substr(c_Color,3,2))
b = evaluate("0x"+substr(c_Color,5,2))
_screen.backcolor = RGB(r,g,b) && le fond est rouge comme la valeur de départ le désigne
? right(TRANSFORM(_screen.BackColor, "@0"),6) && la couleur renvoyé correspond à du bleu

Il affiche 0E01D1 ... Une propostion?
FrancisFaure
Messages postés
41
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
18 octobre 2011
-
Bonjour,
Ton erreur repose sur le fait que tu considére que le nombre retourné par la fonction RGB() est un nombre qui correspondrait, une fois converti en hexa, a 3 octets dans l'ordre RGB,
or c'est l'inverse le poids fort c'est le B, donc BGR...
si tu veux transformer la valeur de RGB() en hexa RGB il te faut inverser les poids avant.

essayer avec cette fonction (surement optimisable :)


FUNCTION RBG_to_Hexa(licolor as Integer) as Integer
LOCAL lbR as Byte
LOCAL lbG as Byte
LOCAL lbB as Byte
lbB = INT(licolor/256^2)
licolor = licolor-lbB*256^2
lbV = INT(licolor/256)
licolor = licolor-lbV*256
lbR = licolor
RETURN RIGHT(TRANSFORM(lbR*256^2+lbV*256+lbB, "@0"),6)
FrancisFaure
Messages postés
41
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
18 octobre 2011
-
Rectification dans la déclaration :
FUNCTION RBG_to_Hexa(licolor as Integer) as string
FrancisFaure
Messages postés
41
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
18 octobre 2011
-
autre solution :p

FUNCTION RGB_to_Hexa(licolor as Integer) as string
LOCAL lcHexa
lcHexa = RIGHT(TRANSFORM(licolor , "@0"),6)
RETURN SUBSTR(lcHexa,5,2) + SUBSTR(lcHexa,3,2) + SUBSTR(lcHexa,1,2)