Desaturar un DisplayObject con ColorMatrixFilter
La clase ColorMatrixFilter nos permite aplicar una matriz de transformación RGBA (rojo, verde, azul, alfa) a nivel de pixel sobre cualquier DisplayObject, a través de la propiedad heredada filters.
En este caso he creado una clase utillería, ColorUtils, con métodos estáticos para pasar a blanco y negro (desaturate), así como para eliminar cualquier filtro aplicado y devolver el objeto a su estado original (restore).
// package utils{ import flash.display.DisplayObject; import flash.filters.ColorMatrixFilter; public class ColorUtils{ public static function desaturate(target:DisplayObject):void{ var el_ar:Array = [ 0.3, 0.59, 0.11, 0, 0, //R 0.3, 0.59, 0.11, 0, 0, //G 0.3, 0.59, 0.11, 0, 0, //B 0, 0, 0, 1, 0]; //A var cm_filter:ColorMatrixFilter = new ColorMatrixFilter(el_ar); target.filters = [cm_filter]; } public static function restore(target:DisplayObject):void{ target.filters = null; } } } //
Para usar estos métodos, es suficiente con llamarlos como hacemos con cualquier método de la clase Math por ejemplo, pasando como parámetro el DisplayObject sobre el que queremos aplicar la transformación de color.
Así, para desaturar un MovieClip llamado item haríamos:
// import utils.ColorUtils; ColorUtils.desaturate(item); //
Y para devolverlo a su estado original haríamos:
// import utils.ColorUtils; ColorUtils.restore(item); //









RSS Articles