Flash/Flex学习笔记(19):滤镜学习
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];
?}
?}
?}