En actionscript 3 existe una clase llamada ColorMatrixFilter, que como el nombre lo dice es un filtro, por lo tanto debemos importarla desde flash.filters.ColorMatrixFilter. Esta clase permite aplicar una transformación a los valores de color y alfa de cada pixel de una imagen. la clase, como otros filtros puede aplicarse a cualquier objeto que herede de DisplayObject. Los filtros de esta clase crean a partir de una matriz de 4x5 que contenga los valores para cada canal RGB.
Supongamos que tenemos una imagen en la librería y queremos que al pasar el mouse por encima ésta se torne a balnco y negro. vamos a necesitar un par de variables para los valores de los canales RGB, un arreglo que contendra todos los valores tanto de RGB como de Alpha, y es el que recibira como argumento la clase ColorMatrixFilter; finalmente una instancia de la clase propiamente dicha:
Código :
import flash.filters.ColorMatrixFilter; // var imagen :Imagen; var blackAndWhiteFilter :ColorMatrixFilter; var redValue :Number; var greenValue :Number; var blueValue :Number; var values :Array; // function attachImage():void { imagen = new Imagen(); imagen.addEventListener(MouseEvent.ROLL_OVER, convert); addChild(imagen); }
en la funcion convert() declararemos los valores...
Código :
function convert (e:MouseEvent):void { redValue = greenValue = blueValue = 0.5; // values = new Array(); values = values.concat([redValue, greenValue, blueValue, 0, 0]); // red values = values.concat([redValue, greenValue, blueValue, 0, 0]); // green values = values.concat([redValue, greenValue, blueValue, 0, 0]); // blue values = values.concat([ 0, 0, 0, 1, 0]); // alpha //... }
como esta clase es un filtro se aplica por medio de la propiedad filters de DisplayObject:
Código :
blackAndWhiteFilter = new ColorMatrixFilter(values); imagen.filters = [blackAndWhiteFilter];
Es importante tener en cuenta que de los canales el mas importante es el rojo, seguido por el verde y el azul. En el ejemplo hemos usado el mismo valor para loe tres canales de mode que la variacion sera plana siendo 0 para el negro total y 1 para el blanco total; una vez que hayemos el rango general debemos cambiar lo valores para lograr mayores contrastes
Código :
redValue = 0.555; greenValue = 0.355; blueValue = 0.285;
El codigo completo quedaria...
Código :
import flash.filters.ColorMatrixFilter; // var imagen :Imagen; var blackAndWhiteFilter :ColorMatrixFilter; var redValue :Number; var greenValue :Number; var blueValue :Number; var values :Array; // function attachImage ():void { imagen = new Imagen(); imagen.addEventListener (MouseEvent.ROLL_OVER, convert); addChild (imagen); } // function convert (e:MouseEvent):void { redValue = 0.555; greenValue = 0.355; blueValue = 0.285; // values = new Array(); values = values.concat([redValue, greenValue, blueValue, 0, 0]); // red values = values.concat([redValue, greenValue, blueValue, 0, 0]); // green values = values.concat([redValue, greenValue, blueValue, 0, 0]); // blue values = values.concat([ 0, 0, 0, 1, 0]); // alpha // blackAndWhiteFilter = new ColorMatrixFilter(values); imagen.filters = [blackAndWhiteFilter]; } // attachImage ();
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por M@U el 26 de Febrero de 2009
Por Zguillez el 27 de Febrero de 2009
Por calinrock el 27 de Febrero de 2009
Por Eliseo el 27 de Febrero de 2009
Por [Ray] el 27 de Febrero de 2009
Por Dano el 27 de Febrero de 2009
Por M@U el 28 de Febrero de 2009
calinrock-blog :
El ataque de mis clones!
Por jcruz el 12 de Enero de 2010
Código :
Por AdrianWeiss el 19 de Febrero de 2011
me dice:
"1046: No se encontró el tipo o no es una constante en tiempo de compilación: Imagen."
como lo soluciono?
Por penHolder el 19 de Febrero de 2011
AdrianWeiss-blog :
me dice:
"1046: No se encontró el tipo o no es una constante en tiempo de compilación: Imagen."
como lo soluciono?
asegurate de que la imagen la tengas en laibreria y no en la pantalla, y tb de que este habilitada para exportacion
Por AdrianWeiss el 20 de Febrero de 2011
penHolder :
AdrianWeiss-blog :
me dice:
"1046: No se encontró el tipo o no es una constante en tiempo de compilación: Imagen."
como lo soluciono?
asegurate de que la imagen la tengas en laibreria y no en la pantalla, y tb de que este habilitada para exportacion
me volvi a fijar... correji lo q me dijiste y ahora me dice esto:
Linea 12: imagen = new Imagen();
1136: Número de argumentos incorrecto. Se esperaba 2.
mil disculpas que te consulte via mensaje privado, recien estoy empezando con esto y entiendo poco, empece a practicar con lo basico q hay en cristalab para aprender.
gracias nuevamente.
Por manuel el 31 de Octubre de 2011