FrancisFaure
Messages postés41Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention18 octobre 2011
-
10 mai 2006 à 15:23
FrancisFaure
Messages postés41Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention18 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.
FrancisFaure
Messages postés41Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention18 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és41Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention18 octobre 2011 18 mai 2006 à 19:19
Rectification dans la déclaration :
FUNCTION RBG_to_Hexa(licolor as Integer) as string
FrancisFaure
Messages postés41Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention18 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és458Date d'inscriptiondimanche 22 décembre 2002StatutMembreDernière intervention18 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és41Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention18 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
18 mai 2006 à 19:26
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)
18 mai 2006 à 19:19
FUNCTION RBG_to_Hexa(licolor as Integer) as string
18 mai 2006 à 19:18
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)
18 mai 2006 à 16:02
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?
10 mai 2006 à 15:23
* 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