J'essaie de définir une valeur de Hue constante pour une image entière avec l'utilisation de ColorMatrix. Mon objectif est de fabriquer une image entière avec la même couleur sans perdre de la luminosité de toute zone. J'ai trouvé un moyen de déplacer les valeurs de Hue d'une image à l'aide de ColorMatrix, mais je n'ai pas trouvé aucun moyen de définir la même valeur de Hue pour tous les pixels. Je peux le faire avec itérant chaque pixel d'image, mais cette approche est trop lente. Je ne suis pas sûr que s'il est possible de le faire avec ColorMatrix et je suis ouvert aux solutions possibles autres que l'approche de ColorMatrix. p>
Hue Shifting Sortie Image * P>
image de sortie souhaitée ** p>
* Ceci peut être fait avec une matrice de couleur p>
** Je peux le faire avec des pixels itérateurs mais pas avec ColorMatrix P>
PS: J'essaie de faire cela sur Android, mais je pense que la question n'est pas directement liée à l'Android puisque l'approche de ColorMatrix est courante sur d'autres plates-formes telles que Flash, C # etc. p>
5 Réponses :
Pas vraiment familier ici, mais je crois que ce lien peut aider: http://www.graficaobscura.com/matrix/index.html C'est Code C. Vous devez donc traduire C -> ColorMatrix, mais dans le dernier paragraphe, il y a l'opération
Hue Rotation While Preserving Luminance
Voici un moyen rapide de le faire, si vous voulez régler la teinte, disons, h (0,5, 0,2, 0,3).
var matrix:Array = new Array(); matrix = matrix.concat([.5, .5, .5, 0, 0]); matrix = matrix.concat([.2, .2, .2, 0, 0]); matrix = matrix.concat([.3, .3, .3, 0, 0]); matrix = matrix.concat([0, 0, 0, 1, 0]); var filter:ColorMatrixFilter = new ColorMatrixFilter(matrix); image.filters = [filter];
Merci pour votre réponse, malheureusement, cela ne fait que changer le RVB et non la valeur de la teinte.
Eh bien, avec cette solution, chaque pixel a la même teinte.
Consultez QColorMatrix , qui a une colormertrix Routine appelée rotatehue code>. Source est en C ++, mais est portable dans d'autres langues (j'ai porté une partie à .NET dans le passé et cela a fonctionné bien). P>
Je ne pense pas qu'il y ait un moyen de faire Je pense que le plus proche que vous puissiez réaliser avec la colormertrix consiste à utiliser un pour convertir en gris, et un autre pour pondérer les valeurs RVB (les teinter). Ce genre de chose est souvent utilisé pour faire de faux photos de tonpia, mais ce n'est pas ce que vous demandez. P>
J'ai fait un échantillon rapide en Flash (cette question est étiquetée comme ActionScript), je ne sais pas si c'est ce que vous recherchez:
http://megaswf.com/serve/1047061 p>
Le code: p>
Si la vitesse est un problème, avez-vous envisagé d'utiliser les shaders de fragment de OpenGL?