Conversion couleur rgb en hexadécimal

5/5 (4 avis)

Snippet vu 17 278 fois - Téléchargée 29 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
Jeanluco Messages postés 3 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 9 juin 2009
14 avril 2009 à 17:22
Merci pour cette correction, j'avais un changement de couleur en utilisant firefox qui est corrigé en ajoutant cette ligne de code
fcassin Messages postés 1 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 29 janvier 2009
29 janv. 2009 à 16:19
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;
}
}
circular Messages postés 17 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 27 mars 2010
22 juin 2007 à 20:27
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);
# }
biskbart Messages postés 10 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 6 décembre 2006
16 nov. 2006 à 22:08
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.