Conversion couleur rgb en hexadécimal

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 139 fois - Téléchargée 28 fois

Contenu du snippet

Mozilla renvoi les couleurs sous la forme rgb(20, 30, 40) et IE sous la forme hexadécimale #141e28 La fonction convertie SI NECESSAIRE la forme rgb en hexadécimal.

Source / Exemple :


function RGBToHex(ColorString) {
  HexDigits = "0123456789abcdef";
  if (ColorString.charAt(0) == '#') {
    return ColorString;
  } else {
    ColorString = ColorString.substr(4);
    pos = ColorString.indexOf(',');
    Result = '#' + HexDigits.substr(Math.floor(ColorString.substr(0, pos) / 16), 1) + HexDigits.substr(ColorString.substr(0, pos) % 16, 1);
    ColorString = ColorString.substr(pos + 1);
    pos = ColorString.indexOf(',');
    Result = Result + HexDigits.substr(Math.floor(ColorString.substr(0, pos) / 16), 1) + HexDigits.substr(ColorString.substr(0, pos) % 16, 1);
    ColorString = ColorString.substr(pos + 1);
    Result = Result + HexDigits.substr(Math.floor(ColorString.substr(0, pos) / 16), 1) + HexDigits.substr(ColorString.substr(0, pos) % 16, 1);
    return Result;
  }
}

A voir également

Ajouter un commentaire Commentaires
Messages postés
3
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
9 juin 2009

Merci pour cette correction, j'avais un changement de couleur en utilisant firefox qui est corrigé en ajoutant cette ligne de code
Messages postés
1
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
29 janvier 2009

Bonjour, il y a un bug dans la méthode liée à la conversion du dernier code (B).
En effet la variable pos n'est pas modifiée, la fonction ne fonctionne donc correctement que lorsque le nombre de chiffre dans G est égal au nombre de chiffres dans B
La solution :
Rajouter la ligne suivante entre la ligne 12 et la ligne 13 :
//On enlève 1 a la longueur de la chaine restante pour se débarrasser de la parenthèse fermante
pos = ColorString.length - 1;

Le code corrigé :
function RGBToHex(ColorString) {
HexDigits = "0123456789ABCDEF";
if (ColorString.charAt(0) == '#') {
return ColorString;
} else {
ColorString = ColorString.substr(4);
pos = ColorString.indexOf(',');
Result = '#' + HexDigits.substr(Math.floor(ColorString.substr(0, pos) / 16), 1) + HexDigits.substr(ColorString.substr(0, pos) % 16, 1);
ColorString = ColorString.substr(pos + 1);
pos = ColorString.indexOf(',');
Result = Result + HexDigits.substr(Math.floor(ColorString.substr(0, pos) / 16), 1) + HexDigits.substr(ColorString.substr(0, pos) % 16, 1);
ColorString = ColorString.substr(pos + 1);
pos = ColorString.length - 1;
Result = Result + HexDigits.substr(Math.floor(ColorString.substr(0, pos) / 16), 1) + HexDigits.substr(ColorString.substr(0, pos) % 16, 1);
return Result;
}
}
Messages postés
17
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
27 mars 2010

Autre méthode :
# if (ColorString.charAt(0) == '#') {
# return ColorString;
# } else
# if (ColorString.substring(0,3)=='rgb')
# {
# re = /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/;
# parsed = re.exec(ColorString);
# return (parsed[1]*0x010000+ parsed[2]*0x000100+
# parsed[3]*0x000001 + 0x1000000).toString(16).substring(1,7);
# }
Messages postés
10
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
6 décembre 2006

Merci pour ce code source. Il m'est bien utile !

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.