topical media & game development

talk show tell print

#graphic-flex-image-effects-07-source-aether-effects-texture-DistressEffect.ax

#graphic-flex-image-effects-07-source-aether-effects-texture-DistressEffect.ax [swf] [flash] flex


  package aether.effects.texture {
  
          import aether.effects.ImageEffect;
          import aether.utils.Adjustments;
          import aether.utils.ImageUtil;
          
          import flash.display.BitmapData;
          import flash.display.BitmapDataChannel;
          import flash.display.BlendMode;
          import flash.filters.BlurFilter;
          import flash.filters.DisplacementMapFilter;
          import flash.filters.DisplacementMapFilterMode;
          import flash.geom.ColorTransform;
          import flash.geom.Point;
          
          public class @ax-graphic-flex-image-effects-07-source-aether-effects-texture-DistressEffect extends ImageEffect {
          
                  private var _amount:Number;
                  
                  public function @ax-graphic-flex-image-effects-07-source-aether-effects-texture-DistressEffect(amount:Number=1, blendMode:String=null, alpha:Number=1) {
                          init(blendMode, alpha);
                          _amount = amount;
                  }
          
                  override protected function applyEffect(bitmapData:BitmapData):void {
                          var baseX:Number = 20;
                          var baseY:Number = 20;
                          var numOctaves:uint = 5;
                          var fractal:Boolean = true;
                          var perlin:BitmapData = bitmapData.clone();
                          perlin.perlinNoise(baseX, baseY, numOctaves, int(new Date()), true, fractal, 1, true);
                          Adjustments.setLevels(perlin, 0, 50, 100);
                          var displaceX:Number = _amount;
                          var displaceY:Number = _amount*3;
                          ImageUtil.applyFilter(bitmapData, new DisplacementMapFilter(perlin, new Point(), 1, 1, displaceX, displaceY, DisplacementMapFilterMode.CLAMP));
  
                          var noise:BitmapData = new BitmapData(bitmapData.width, bitmapData.height, true, 0x00000000);
                          noise.fillRect(noise.rect, 0xFFFFFF);
                          noise.noise(int(new Date()), 0, 255, 1, true);
                          ImageUtil.applyFilter(noise, new BlurFilter(displaceX, displaceY));
                          Adjustments.setLevels(noise, 100, 102, 105);
  
                          var alpha:BitmapData = ImageUtil.getChannelData(bitmapData, BitmapDataChannel.ALPHA);
                          alpha.draw(noise, null, new ColorTransform(1, 1, 1, Math.min(1, _amount*.2)), BlendMode.MULTIPLY);
                          
                          bitmapData.copyChannel(alpha, alpha.rect, new Point(), BitmapDataChannel.RED, BitmapDataChannel.ALPHA);
                  }
          
          }
          
  }


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.