Flash/Flex学习笔记(22):滤镜学习

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];
		}
	}
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏清墨_iOS分享

OpenGLES-03 使用索引绘制矩形

这篇文章我们同样借助上篇文章《OpenGLES-02 绘制基本图元(点、线、三角形)》的代码,使用另外一种画法来绘制一个矩形。 修改render方法如下: -(...

38910
来自专栏码匠的流水账

聊聊Color中的alpha值

color对象里头的alpha其实是指不透明度,其值范围为0-255,越大越不透明。 其通常对应opacity,这个就是单词语义表达的不透明度,其值范围[0,1...

1082
来自专栏Linux驱动

动态规划-数正方形(详解)

描述: 晓萌有一个N×N的的棋盘,中间有N*N个正方形的1×1的格子,他随机在棋盘上撒上一些棋子(假设全部正好落在各个格子里)。他希望知道,当前的棋盘上有多少个...

2218
来自专栏程序员同行者

JavaScript中的CSS属性对照表

1104
来自专栏wblearn

Java小程序祝国庆快乐祝大家国庆节快乐

上面是用java的JFrame为基础实现的效果,下面用面向对象的思考分析并实现此效果:

1021
来自专栏计算机视觉及音视频工程

Python常用写法理解

3423
来自专栏王肖的UT

《OpenGL ES 2.0 for Android》读书笔记

OpenGL其实只能绘制三角形,确定三个顶点,然后就可以绘制一个三角形,多个三角形拼在一起就可以组成各式各样的图形,把图片资源贴到这些各式各样的图形上就可以实现...

1.8K9
来自专栏听雨堂

EXCEL单元格的引用方式

EXCEL单元格的引用包括相对引用、绝对引用和混合引用三种。 相对引用   公式中的相对单元格引用(例如 A1)是基于包含公式和单元格引用的单元格的相对...

1927
来自专栏Hongten

python开发_tkinter_单选菜单_不可用菜单操作

============================================================

1581
来自专栏Golang语言社区

Go语言实现猜数字小游戏的方法

package main import ( "bufio" "fmt" "math/rand" "os" "strconv" ...

3235

扫码关注云+社区

领取腾讯云代金券