package { import flash.display.BitmapData; import flash.filters.BlurFilter; import flash.filters.ColorMatrixFilter; import flash.geom.Point; [SWF(width=400, height=600, backgroundColor=0x000000)] /** * Creates a pointist painting effect using BitmapData's pixelDissolve() * to introduce white pixels into an image. */ public class graphic_flex_image_effects_04_Flex_PixelDissolveTest extends graphic_flex_image_effects_04_Flex_AbstractImageLoader { /** * Constructor. Passes path of image to load to super class. */ public function graphic_flex_image_effects_04_Flex_PixelDissolveTest() { super("graphic-flex-image-effects-04-assets-fungus.jpg"); } /** * Called when image completes loading in super class. * This invokes pixelDissolve() on image to introduce random white pixels. */ override protected function runPostImageLoad():void { var bitmapData:BitmapData = _loadedBitmap.bitmapData; // affect 1/3 of the pixels var numPixels:uint = (bitmapData.width*bitmapData.height)/3; bitmapData.pixelDissolve( bitmapData, bitmapData.rect, new Point(), 0, numPixels, 0xFFFFFFFA ); // desaturate and blur the result _loadedBitmap.filters = [getSaturationFilter(), new BlurFilter()]; addChild(_loadedBitmap); } /** * Returns the ColorMatrixFilter needed to desaturate an image slightly. * * @return The ColorMatrixFilter needed to desaturate an image slightly. */ private function getSaturationFilter():ColorMatrixFilter { var r:Number = 0.3; var g:Number = 0.59; var b:Number = 0.11; // the amount to desaturate var amount:Number = 2.2; var inverse:Number = 1-amount; var matrix:Array=[ inverse*r+amount, inverse*g, inverse*b, 0, 0, inverse*r, inverse*g+amount, inverse*b, 0, 0, inverse*r, inverse*g, inverse*b+amount, 0, 0, 0, 0, 0, 1, 0 ]; return new ColorMatrixFilter(matrix); } } }