Silverlight中称之为“效果(Effect)”的东东,在Flash里叫“滤镜(Filter)",而且Flash里内置的滤镜要比Silverlight丰富很多,几乎所有对象都有一个filters的属性,它是一个数组,可以将一个或多个滤镜同时应用于某一对象,类似的,如果要去除已经应用的滤镜效果,只要将filters数组清空即可
var _data:DataProvider = new DataProvider(); _data.addItem({label:"不应用任何滤镜",data:""}); _data.addItem({label:"Blur(模糊滤镜)",data:"Blur"}); _data.addItem({label:"Drop shadow(投影滤镜)",data:"DropShadow"}); _data.addItem({label:"Glow(发光滤镜)",data:"Glow"}); _data.addItem({label:"Gradient bevel(渐变斜角滤镜)",data:"GradientBevel"}); _data.addItem({label:"Convolution(卷积滤镜)",data:"Convolution"}); _data.addItem({label:"Blur(模糊滤镜)+DropShadow(投影滤镜)",data:"Blur&DropShadow"}); cbo1.dataProvider=_data; cbo1.addEventListener(Event.CHANGE,ChangeHandler); function ChangeHandler(e:Event):void { var _item:Object = (e.currentTarget as ComboBox).selectedItem; //trace(_item.data); switch (_item.data) { case "Blur" : img.filters=[new BlurFilter(5,5,3)]; break; case "DropShadow" : var _shadow:DropShadowFilter = new DropShadowFilter(); _shadow.distance=10; _shadow.alpha=0.3; img.filters=[_shadow]; break; case "Glow" : img.filters=[new GlowFilter(0xffff99,0.5,40,40,3,1,false)]; break; case "GradientBevel" : var bgColor:uint=0xCCCCCC; var size:uint=80; var offset:uint=50; var distance:Number=5; var angleInDegrees:Number=225;// opposite 45 degrees var colors:Array=[0xFFFFFF,0xCCCCCC,0x000000]; var alphas:Array=[1,0.1,1]; var ratios:Array=[0,128,255]; var blurX:Number=8; var blurY:Number=8; var strength:Number=2; var quality:Number=BitmapFilterQuality.HIGH; var type:String=BitmapFilterType.FULL; var knockout:Boolean=false; img.filters = [new GradientBevelFilter(distance, angleInDegrees, colors, alphas, ratios, blurX, blurY, strength, quality, type, knockout)]; break; case "Convolution" : var clamp:Boolean=false; var clampColor:Number=0xFF0000; var clampAlpha:Number=1; var bias:Number=0; var preserveAlpha:Boolean=false; var matrixCols:Number=3; var matrixRows:Number=3; var matrix:Array = [ 1,1,1, 1,1,1, 1,1,1 ]; var filter:ConvolutionFilter=new ConvolutionFilter(matrixCols,matrixRows,matrix,matrix.length,bias,preserveAlpha,clamp,clampColor,clampAlpha); img.filters=[filter]; break; case "Blur&DropShadow" : var _shadow2:DropShadowFilter = new DropShadowFilter(); _shadow2.distance=10; _shadow2.alpha=0.3; img.filters=[new BlurFilter(5,5,3),_shadow2]; break; case "" : default : img.filters=[]; break; } }
package { import flash.display.Sprite; import flash.events.Event; import flash.filters.DropShadowFilter; import flash.filters.BlurFilter; public class DynamicFilter extends Sprite { private var dropShadowFilter:DropShadowFilter; private var blurFilter:BlurFilter; public function DynamicFilter() { init(); } private function init():void { //注:mm是舞台上的一个图片实例 mm.x = stage.stageWidth/2; mm.y = stage.stageHeight/2; dropShadowFilter = new DropShadowFilter(); dropShadowFilter.alpha = 0.3; blurFilter = new BlurFilter(); addEventListener(Event.ENTER_FRAME, EnterFrameHandler); } private function EnterFrameHandler(event:Event):void { var dx:Number = mouseX - mm.x; var dy:Number = mouseY - mm.y; dropShadowFilter.distance = - Math.sqrt(dx*dx+dy*dy)/10; dropShadowFilter.angle = Math.atan2(dy,dx)*180/Math.PI; blurFilter.blurX = Math.abs(dx)/30; blurFilter.blurY = Math.abs(dy)/30; mm.filters = [blurFilter,dropShadowFilter]; } } }