Comunidad de diseño web y desarrollo en internet online

Pasar una imagen bitmap a blanco y negro con ActionScript 3

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.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate