COULEUR HEXADECIMAL

FrancisFaure Messages postés 41 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 18 octobre 2011 - 10 mai 2006 à 15:23
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

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
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)
FrancisFaure Messages postés 41 Date d'inscription mercredi 6 octobre 2004 Statut Membre Dernière intervention 18 octobre 2011
18 mai 2006 à 19:19
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
18 mai 2006 à 19:18
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)
tmcuh Messages postés 458 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 18 avril 2009
18 mai 2006 à 16:02
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
10 mai 2006 à 15:23
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
Rejoignez-nous