flash as 3利用滤镜变换位图颜色

本文介绍了一个使用Flash CS5的颜色矩阵滤镜应用示例。通过构造函数调用buildChild()四次,分别展示未经滤镜处理及经过红、绿、蓝三色滤镜处理的图像实例。示例代码详细展示了如何使用ColorMatrixFilter应用不同颜色效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转至 flash CS5 官方帮助文档
以下示例将不同的颜色矩阵滤镜应用于图像文件。滤镜构造函数调用 buildChild() 四次,以加载和显示图像的四个实例。对 buildChild() 的第一次调用将 null 作为参数,不将滤镜应用于第一个实例。对 buildChild() 的每次后续调用都将函数作为参数,该函数将不同的颜色矩阵滤镜应用于图像的每个后续实例。
buildChild() 函数创建一个名为 loader 的新 Loader 对象。每次调用 buildChild() 时,将一个事件侦听器附加到 Loader 对象,以侦听 complete 事件,这些事件由传递给 buildChild() 的函数处理。

applyRed()、applyGreen() 和 applyBlue() 函数使用 matrix 数组的不同值来实现不同的效果。

注意:为获得最佳效果,请使用宽度约为 80 像素的图像。图像文件的名称和位置应与您传递给 url 属性的值相匹配。例如,此示例中传递给 url 的值指向名为“Image.jpg”的图像文件,该图像文件与 SWF 文件位于同一目录中。

package {
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.filters.ColorMatrixFilter;
import flash.net.URLRequest;

public class ColorMatrixFilterExample extends Sprite {
private var size:uint = 140;
private var url:String = "Image.jpg";

public function ColorMatrixFilterExample() {
buildChild(null);
buildChild(applyRed);
buildChild(applyGreen);
buildChild(applyBlue);
}

private function buildChild(loadHandler:Function):void {
var loader:Loader = new Loader();
loader.x = numChildren * size;
loader.y = size;
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
if (loadHandler != null) {
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler);
}

var request:URLRequest = new URLRequest(url);
loader.load(request);
addChild(loader);
}

private function applyRed(event:Event):void {
var child:DisplayObject = DisplayObject(event.target.loader);
var matrix:Array = new Array();
matrix = matrix.concat([1, 0, 0, 0, 0]); // red
matrix = matrix.concat([0, 0, 0, 0, 0]); // green
matrix = matrix.concat([0, 0, 0, 0, 0]); // blue
matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha

applyFilter(child, matrix);
}

private function applyGreen(event:Event):void {
var child:DisplayObject = DisplayObject(event.target.loader);
var matrix:Array = new Array();
matrix = matrix.concat([0, 0, 0, 0, 0]); // red
matrix = matrix.concat([0, 1, 0, 0, 0]); // green
matrix = matrix.concat([0, 0, 0, 0, 0]); // blue
matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha

applyFilter(child, matrix);
}

private function applyBlue(event:Event):void {
var child:DisplayObject = DisplayObject(event.target.loader);
var matrix:Array = new Array();
matrix = matrix.concat([0, 0, 0, 0, 0]); // red
matrix = matrix.concat([0, 0, 0, 0, 0]); // green
matrix = matrix.concat([0, 0, 1, 0, 0]); // blue
matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha

applyFilter(child, matrix);
}

private function applyFilter(child:DisplayObject, matrix:Array):void {
var filter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
var filters:Array = new Array();
filters.push(filter);
child.filters = filters;
}

private function ioErrorHandler(event:IOErrorEvent):void {
trace("Unable to load image: " + url);
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值