Couleur hexadecimal

Soyez le premier à donner votre avis sur cette source.

Snippet vu 19 120 fois - Téléchargée 27 fois

Contenu du snippet

J'avais besoin pour des besoins tiré web d'avoir un système permettant d'encoder et de visualiser dans mon code la couleur "web", elle est représentez sous la forme Hexadécimal ce qui complique un peu plus la chose.
J'ai parcourue le web et c'est sur MSDN que j'ai trouvé la solution, il me semble bon de la présenter ici.

J'ai un champs (C_color) dans une table renseignant la couleur sous la forme 'ff00ff' qui correspondrait à rose --> rgb(255,0,255)
Pour faire ma conversation j'utilise 3 variables temporaires pour mes 3 couleurs primaire (Rouge Vert Bleu)

Source / Exemple :


&& Exemple pour transformer l'hexa en decimal
lc_colorR = '0x' +SUBSTR(C_Color,1,2)
lc_colorG = '0x' +SUBSTR(C_Color,3,2)
lc_colorB = '0x' +SUBSTR(C_Color,5,2)

monobjet.Backcolor = RGB(&lc_colorR, &lc_colorG, &lc_colorB)

myvar = Int2Hex(monobjet.Backcolor)     && myvar contient le code hexadécimal sur 6 caractères

&& fonction pour transformer le décimal en hexa
&& EXTRAIT DE http://www.news2news.com/vfp/?example=260
FUNCTION  Int2Hex (num)
    DECLARE INTEGER wnsprintf IN Shlwapi;
        STRING @lpOut, INTEGER cchLimitIn,;
        STRING pszFmt, INTEGER

    LOCAL lnResult, lcResult
    lcResult = SPACE(20)
    lnResult = wnsprintf(@lcResult, 20, "%x", num)
    RETURN Left(lcResult, lnResult)
ENDFUNC

A voir également

Ajouter un commentaire

Commentaires

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)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.