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];
		}
	}
}
时间: 2024-08-31 18:11:44

Flash/Flex学习笔记(22):滤镜学习的相关文章

ExtJs学习笔记(22)-XTemplate + WCF 打造无刷新数据分页

ExtJs的Grid组件虽然不管从哪一方面来讲,都称得上是很好很强大,但是总会有一些应用场景并不需要这么多功能,比如网站的留言列表,开发者只想要一个简单的<li>或<table>列表而已,这时候XTemplate就显得很有用了. 本文将讲解如何用XTemplate结合WCF与服务端交互,生成数据列表,同时加上无刷新分页功能(默认情况下ExtJs并没有为XTemplate并没有提供分页功能) 1.先做一些准备工作,写一个通用的类(改编自老张的PageData),用于WCF向ExtJs

Symbian学习笔记(22)

在Symbian中使用皮肤是一个让我这样新手颇觉得费劲的事情.折腾了一天, 把几种情况都试验了一把,总结一下吧. 1.一句话的方法 最基本的一招就是在AppUi中的ConstructL()中加一句话搞定.如下: void CTestMIMAppUi::ConstructL() { BaseConstructL (CAknAppUi::EAknEnableSkin);//add your code here...} 用上面这句话基本上能让大部分控件的透明化,显示出系统的皮肤. 但是,有时我们会发现

Android学习笔记(22):AdapterView与Adapter

AdapterView继承自ViewGroup,是一个抽象基类,作为容器使用,容器内是多个列表项,列表项有相似的形式,列表项的内容由Adapter提供.调用AdapterView的setAdapter(Adapter)方法设置内容.   AdapterView派生了三个子类:ABSListView.AbsSpinner和AdapterViewAnimator,这也是抽象类.   AbsListView支持的XML属性和相关方法: Attribute Name Related Method Des

spring学习笔记(22)声明式事务配置,readOnly无效写无异常

在上一节内容中,我们使用了编程式方法来配置事务,这样的优点是我们对每个方法的控制性很强,比如我需要用到什么事务,在什么位置如果出现异常需要回滚等,可以进行非常细粒度的配置.但在实际开发中,我们可能并不需要这样细粒度的配置.另一方面,如果我们的项目很大,service层方法很多,单独为每个方法配置事务也是一件很繁琐的事情.而且也可能会造成大量重复代码的冗杂堆积.面对这些缺点,我们首要想到的就是我们spring中的AOP了.spring声明式事务的实现恰建立在AOP之上. 在这一篇文章中,我们介绍s

ExtJs学习笔记

ExtJS学习笔记 - onReady Extjs学习笔记 - 实战 Extjs学习笔记 - 初篇 ExtJs学习笔记(24)-Drag/Drop拖动功能 ExtJs学习笔记(23)-ScriptTagProxy+XTemplate+WCF跨域取数据 ExtJs学习笔记(22)-XTemplate + WCF 打造无刷新数据分页 ExtJs学习笔记(21)-使用XTemplate结合WCF显示数据 ExtJs学习笔记(20)-利用ExtJs的Ajax与服务端WCF交互 ExtJs学习笔记(19)

Symbian学习笔记

Symbian学习笔记(22) - 关于皮肤的小结 Symbian学习笔记(21)--原来还有这个工具wsdl2cpp,访问webserv Symbian学习笔记(20)--用gSOAP更简单地实现Web Services Clien Symbian学习笔记(19)--初探WebServices API的使用(下) Symbian学习笔记(18)--初探WebServices API的使用(中) Symbian学习笔记(17)--初探WebServices API的使用(上) Symbian学习

SSH整合学习笔记之spring与hibernate简单整合.doc

SSH整合学习笔记 大致的学习了一下struts1.x struts2.x  spring2.5 hibernate3.6,觉得东西很多,好些东西都记不住,最后发现想记住的方法就是多练习.自己多写一下简单的工程也会把这些知识巩固,但是公司现在不用这个,所以只能记下笔记,不忙的时候再拿来看看,坚持的练习一下.我也是初学,所以只是记下一些基础的东西,如果写错了什么,请朋友多多指出. 个人对SSH的理解也不算深入,只是大概的学完一圈觉得spring很强大,有的人觉得spring很难学,但是我觉得str

【cJSON】CJSON学习笔记(二)

1.重要函数说明     [1]两个创建     [创建JSON对象]cJSON *cJSON_CreateObject(void);     [创建JSON数组]cJSON *cJSON_CreateArray(void);          [2]两种添加     [向对象中添加]voidcJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);     [向数组中添加]void cJSON_AddItemToAr

red5学习笔记(汇总)

转载自tomzhang的博客   Red5学习笔记(汇总) Red5学习笔记1--Red5安装 Red5学习笔记2--Red5例子 Red5学习笔记3--Red5和Tomcat整合 Red5学习笔记4--as3和java互相调用 Red5学习笔记5--Red5远程共享对象 Red5学习笔记6--Red5调试 Red5学习笔记7--Red5计划任务 Red5学习笔记8--编译Red5源代码 Red5学习笔记9--Ant方式编译Red5 Red5学习笔记10--Red5源代码目录结构 Red5学习笔