RGB Int à RGB - Python
Comment puis-je convertir RVB entier à l'RVB correspondant tuple (R,G,B)
? Semble assez simple, mais je ne trouve rien sur google.
Je sais que pour chaque RVB (r,g,b)
vous avez l'entier n = r256^2 + g256 + b
comment puis-je résoudre l'inverse en Python, c'est à dire donné un n
j'ai besoin de la r
,g
,b
valeurs.
source d'informationauteur Omar
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas un expert Python par tous les moyens, mais pour autant que je sais qu'il a les mêmes opérateurs que C.
Si oui cela devrait fonctionner et il devrait également être beaucoup plus rapide que d'utiliser le modulo et la division.
Ce qu'il fait qu'il masque le plus faible de l'octet dans chaque cas (le binaire et avec 255.. est Égal à 8 bits). Pour les vert et rouge de la composante, il fait la même chose, mais les variations de la couleur-canal dans la plus faible de l'octet d'abord.
À partir d'un RVB entier:
Cela peut être assez simplement mis en œuvre une fois que vous savez comment l'obtenir. 🙂
Upd: Ajout d'une fonction python. Vous ne savez pas si il y a une meilleure façon de le faire, mais cela fonctionne sur Python 3 et 2.4
Il y a également une excellente solution qui utilise bitshifting de masquage et c'est sans doute beaucoup plus rapide que Nils Pipenbrinck posté.
et
Je suppose que vous avez un entier de 32 bits contenant les valeurs RVB (par exemple ARGB). Ensuite, vous pouvez décompresser les données binaires à l'aide de la
struct
module:Ce produit est le suivant integer:
Vous pouvez décompresser puis il le manière explicite:
..ou de manière plus compacte:
De l'échantillon s'applique à un nombre quelconque de chiffres, de l'e.g un RGBA couleur:
Juste une note pour toute personne utilisant Google Appengine Images de l'API Python. J'ai trouvé que j'avais une situation où j'ai dû fournir une méthode avec un 32 bits valeur de couleur RVB.
Plus précisément, si vous êtes à l'aide de l'API pour convertir un PNG (ou n'importe quelle image avec des pixels transparents), vous devez fournir l'execute_transforms méthode avec un argument appelé transparent_substitution_rgb qui doit être en 32 bits valeur de couleur RVB.
Emprunt de dbr réponse, je suis venu avec une méthode similaire à ceci:
Si seulement le
divmod(value, (divider1, divider2, divider3…))
suggestion est acceptée, il aurait simplifié les diverses conversions de temps trop.Il y a probablement une façon plus simple de le faire:
EDIT: c'est mal - donne la réponse en Hexadécimal, OP voulu int.
EDIT2: raffinée pour réduire la misère et l'échec de besoin%06x " pour assurer hex est toujours montré comme six chiffres [merci à Peter Hansen commentaire].
Si vous utilisez NumPy et vous avez un tableau de RGBints, vous pouvez également changer sa dtype pour extraire le rouge, vert, bleu et alpha composants:
En ajoutant à ce qui est mentionné ci-dessus. Un concis one-liner de remplacement.
Et pour éviter toute confusion à l'avenir.