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 calinrock el 27 de Febrero de 2009
Por Eliseo el 27 de Febrero de 2009
calinrock-blog :
El ataque de mis clones!
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?
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