Conversion de couleur HSV à RVB
Est-il un moyen de convertir VHS couleur des arguments de type RVB de la couleur arguments à l'aide de pygame modules en python? J'ai essayé le code suivant, mais il renvoie ridicule valeurs.
import colorsys
test_color = colorsys.hsv_to_rgb(359, 100, 100)
print(test_color)
et ce code renvoie la suite de non-sens
(100, -9900.0, -9900.0)
Ce n'est évidemment pas le RVB. Ce que je fais mal?
source d'informationauteur AvZ
Vous devez vous connecter pour publier un commentaire.
Que la fonction attend virgule pour
s
(saturation) etv
(valeur), et non pour cent. Diviser par 100.Si vous souhaitez la non-normalisé RVB tuple, voici une fonction pour envelopper le
colorsys
fonction.Exemple fonctionnalité
Si vous aimez la performance, il est préférable d'éviter l'importation et l'utilisation de votre propre code optimisé
Voici le code exact de colorsys légèrement modifiée pour rendre le byte-code légèrement plus rapide:
de sortie:
À l'aide d'un si-chaîne comme ci-dessus est en fait plus rapide que l'utilisation de elif
L'aide d'un wrapper, comme dans le Cyber réponse, prend un quelques étapes supplémentaires pour l'interprète à effectuer.
Pour ajouter, pour la boucle dans les Cyber-l'exemple est une véritable performance tueur lorsqu'il est utilisé comme que
Si vous voulez un peu plus de performance, il suffit de faire ceci:
(Je ne dis pas que c'est la meilleure performance possible, mais c'est certainement mieux)
^ ce qui garantit int() de sortie avec une gamme de 255 (l'entrée est toujours le même)
CONSEIL: restez à l'écart à partir de la 3e partie, si possible, essayez l'approche directe si vous le pouvez.
exculusions: compilé en C des extensions telles que PIL ou NumPy, ou ctypes wrappers comme PyOpenGL (utilise la DLL)
La Teinte argument devrait également varier entre 0 et 1.
J'ai préparé un vectorisé version, c'est la dpa 10 fois plus rapide
Si vous travaillez avec des tableaux Numpy puis
matplotlib.couleurs.hsv_to_rgb
est assez direct:Noter que l'entrée et la sortie des images ont des valeurs dans l'intervalle [0, 1].