Couleur Decimale en hexa

Titou4u Messages postés 25 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 7 mars 2006 - 2 nov. 2004 à 23:30
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 3 nov. 2004 à 10:11
voila mon problème

J'ai crée des picturebox, je leur fait recuperer des couleurs en backcolor.

La valeur de ces couleurs est en décimal

et lorsque par exemple la couleur est rouge et que je la converti en hexa, j'obtiens FF...

J'ai trouvé une source sur ce site pour les convertir correctement, mais lorsque je converti du rouge en hexa, j'obtiens 0000FF,cette couleur ne devrait elle pas être FF0000???

comment faire, si quelqu'un pouvait m'aider... merci

TiToU

13 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 nov. 2004 à 23:56
si on fait
couleur = (255, 0,0)
donc avec Rouge = 255, Vert=0 et Bleu =0
on se retrouve avec:
Hex$(couleur) égal à FF
avec Rouge 0, Vert 0 et Bleu = 255
on aura:
Hex$(couleur) égal à FF0000

le Bleu est devant, ensuite le Vert, ensuite le Rouge:
en Hexa tu retrouvera: BBVVRR

où est le problème ?
0
Titou4u Messages postés 25 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 7 mars 2006
3 nov. 2004 à 00:02
Le probléme, c'est que comme tu le dis

si on fait
couleur = (255, 0,0)
donc avec Rouge = 255, Vert=0 et Bleu =0
on se retrouve avec:
Hex$(couleur) égal à FF


pour une coleur rouge en html,on aurait du obtenir FF0000
hors la, on obtient juste FF, donc, ca ne va pas
Comment convertir le Long obtenu par la picturebox en FF0000?
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 nov. 2004 à 00:11
pourquoi ça va pas.

si je fais
Picture1.BackColor = &H0000FF j'obtiens bien du Rouge

Picture1.BackColor = &HFF0000 j'obtiens bien du Bleu
0
Titou4u Messages postés 25 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 7 mars 2006
3 nov. 2004 à 00:15
Ce que je veux faire, c'est exactement l'inverse, toi tu insert une couleur en hexa dans une picturebox, alors que moi, je veux extraire la couleur de la picturebox en la mettant en RGB...

chez moi
Dim color as string

color = pucture1.backcolor
color = hex$(color) ' me renvoie une valeur en hexa, mais pas en RGB...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
3 nov. 2004 à 00:20
Si la couleur en Long est entrée dans Text1.Text, et qu'on dispose d'un bouton nommé Command1, alors çà doit donner ceci :

Private Function rouge(c As Long) As Long
rouge = c And &HFF
End Function

Private Function vert(c As Long) As Long
vert = (c \ 256) And &HFF
End Function

Private Function bleu(c As Long) As Long
bleu = (c \ 256) \ 256
End Function

Private Sub Command1_Click()
Dim r As String, v As String, b As String
r = Hex(rouge(Text1.Text))If Len(r) 1 Then r "0" & r
v = Hex(vert(Text1.Text))If Len(v) 1 Then v "0" & v
b = Hex(bleu(Text1.Text))If Len(b) 1 Then b "0" & b

MsgBox r & v & b
End Sub


Manu
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 nov. 2004 à 00:34
Dim couleur As Long
Dim Rouge As Byte
Dim Vert As Byte
Dim Bleu As Byte

' exemple
couleur = &H10203

' extraction des couleurs
Rouge = couleur And 255
couleur = couleur \ 256
Vert = couleur And 255
couleur = couleur \ 256
Bleu = couleur

' inversion
couleur = Rouge * 65536 + Vert * 256 + Bleu
MsgBox Hex$(couleur)
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 nov. 2004 à 00:47
ou directement:

couleur = (couleur And &HFF0000) \ 65536 Or (couleur And &HFF00) Or (couleur And &HFF) * 65536
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
3 nov. 2004 à 01:56
Gobillot > Il me semble que ce qu'il veut, c'est récupérer la valeur hexadécimale d'une couleur sur 6 caractères (au format web).

rouge = "FF0000", et pas juste "FF" comme le donne la fonction Hex()

Manu
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 nov. 2004 à 02:04
Une fois que sa couleur est remise dans le bon sens (format HTML #FF0000 --> Rouge)
if suffit de faire ça:

MsgBox Right$("000000" & Hex$(couleur), 6)
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
3 nov. 2004 à 02:24
Certes ... certes ...
Mais tu auras un problème dans le cas suivant (par exemple) :

rouge = 33 --> "21"
bleu = 14 ---> "E"
vert = 33 ---> "21"

La valeur de la couleur, ce n'est pas 21E21, mais 210E21.

Mais bon, on polémique, on polémique ... faudrait peut-être aller se coucher là !!! :)

Manu
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 nov. 2004 à 02:29
non je crois pas !

on verra demain.

Bonne nuit

Daniel
0
Titou4u Messages postés 25 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 7 mars 2006
3 nov. 2004 à 03:38
vous tracassez pas, g trouvé
en effet comme tu le fais si bien remarquer econs, avec son code, il memanque des 0, mon code n'est pas trés propre et probablement encore moisn performant, mais il fonctionne:

Public Function GetHex(color As String) As String

    ' au préalable, la couleur était stoquée dans une variable de type string

    Dim couleur As Long
    Dim Rouge As String
    Dim Vert As String
    Dim Bleu As String
    Dim rRouge As Long
    Dim vVert As Long
    Dim bBleu As Long

    couleur = color

    ' extraction des couleurs
    Rouge = couleur And 255
    rRouge = Rouge
    Rouge = Hex$(Rouge)
    If rRouge < 16 Then Rouge = "0" & Rouge ' si valeur inferieur a 10 donc de 0 à F on lui rajoute un 0...
    
    couleur = couleur \ 256
    Vert = couleur And 255
    vVert = Vert
    Vert = Hex$(Vert)
    If vVert < 16 Then Vert = "0" & Vert
    
    couleur = couleur \ 256
    Bleu = couleur
    bBleu = Bleu
    Bleu = Hex$(Bleu)
    If bBleu < 16 Then Bleu = "0" & Bleu
    
    GetHex = Rouge & Vert & Bleu
    
End Function


Merci a vous deux pour votre aide...

TiToU ;o)
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 nov. 2004 à 10:11
La même chose en une seule ligne de code, et tous les zéros sont bien à leur place.

GetHex = Right$("000000" & Hex$((color And &HFF0000) \ 65536 Or (color And &HFF00&) Or (color And &HFF) * 65536), 6)

Daniel
0
Rejoignez-nous