| 包 | flash.filters |
| 类 | public class ShaderFilter |
| 继承 | ShaderFilter BitmapFilter Object |
| 语言版本: | ActionScript 3.0 |
| 运行时版本: | Flash Player 10, AIR 1.5 |
若要创建新的滤镜,请使用构造函数 new ShaderFilter()。滤镜的具体使用取决于要应用滤镜的对象:
filters 属性(继承自 DisplayObject)。设置对象的 filters 属性不会修改相应的对象,而清除 filters 属性可以删除相应的滤镜。
BitmapData.applyFilter() 方法。对 BitmapData 对象调用 applyFilter() 会取得源 BitmapData 对象和滤镜对象,并最终生成一个过滤图像。
如果对显示对象应用滤镜,则该对象的 cacheAsBitmap 属性值将设置为 true。如果删除所有滤镜,将恢复 cacheAsBitmap 的原始值。
此滤镜支持舞台缩放。但是,它不支持常规缩放、旋转和倾斜。 如果对象本身进行了缩放(如果 scaleX 和 scaleY 属性未被设置为 100%),则滤镜不进行缩放。 只有用户在舞台上进行放大时它才会缩放。
如果所得图像超过最大尺寸,则不应用滤镜。在 AIR 1.5 和 Flash Player 10 中,最大宽度或高度为 8,192 像素,并且像素总数不能超过 16,777,216 像素。(因此,如果图像的宽度为 8,192 像素,则其高度只能为 2,048 像素。)在 Flash Player 9 及早期版本和 AIR 1.1 及早期版本中,高度最大为 2,880 像素,宽度最大为 2,880 像素。 例如,如果在放大某大型影片剪辑时应用了滤镜,则所得图像超过最大尺寸时,将关闭该滤镜。
若要指定将 Shader 实例用于滤镜,请将 Shader 实例作为参数传递到 ShaderFilter() 构造函数,或将其设置为 shader 属性的值。
若要允许着色器输出超出已过滤对象的范围,请使用 leftExtension、rightExtension、topExtension 和 bottomExtension 属性。
另请参见
| 属性 | 定义方 | ||
|---|---|---|---|
| bottomExtension : int 目标对象底部的增大量(以像素为单位)。 | ShaderFilter | ||
![]() | constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | |
| leftExtension : int 目标对象左侧的增大量(以像素为单位)。 | ShaderFilter | ||
![]() | prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object | |
| rightExtension : int 目标对象右侧的增大量(以像素为单位)。 | ShaderFilter | ||
| shader : Shader 要为此滤镜使用的着色器。 | ShaderFilter | ||
| topExtension : int 目标对象顶部的增大量(以像素为单位)。 | ShaderFilter | ||
| 方法 | 定义方 | ||
|---|---|---|---|
ShaderFilter(shader:Shader = null) 创建新的着色器滤镜。 | ShaderFilter | ||
![]() | 返回 BitmapFilter 对象,它是与原始 BitmapFilter 对象完全相同的副本。 | BitmapFilter | |
![]() |
指示对象是否已经定义了指定的属性。 | Object | |
![]() |
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | |
![]() |
指示指定的属性是否存在、是否可枚举。 | Object | |
![]() |
设置循环操作动态属性的可用性。 | Object | |
![]() |
返回指定对象的字符串表示形式。 | Object | |
![]() |
返回指定对象的原始值。 | Object | |
| bottomExtension | 属性 |
bottomExtension:int [读写] | 语言版本: | ActionScript 3.0 |
| 运行时版本: | Flash Player 10, AIR 1.5 |
目标对象底部的增大量(以像素为单位)。
该增大量是指超出目标对象范围并在执行着色器期间传递到该着色器的范围。在执行着色器时,Flash Player 或 AIR 将计算影片剪辑的正常范围,然后基于 leftExtension、rightExtension、topExtension 和 bottomExtension 值扩展该范围。
默认值为 0.
public function get bottomExtension():int public function set bottomExtension(value:int):void| leftExtension | 属性 |
leftExtension:int [读写] | 语言版本: | ActionScript 3.0 |
| 运行时版本: | Flash Player 10, AIR 1.5 |
目标对象左侧的增大量(以像素为单位)。
该增大量是指超出目标对象范围并在执行着色器期间传递到该着色器的范围。在执行着色器时,Flash Player 或 AIR 将计算影片剪辑的正常范围,然后基于 leftExtension、rightExtension、topExtension 和 bottomExtension 值扩展该范围。
默认值为 0.
public function get leftExtension():int public function set leftExtension(value:int):void| rightExtension | 属性 |
rightExtension:int [读写] | 语言版本: | ActionScript 3.0 |
| 运行时版本: | Flash Player 10, AIR 1.5 |
目标对象右侧的增大量(以像素为单位)。
该增大量是指超出目标对象范围并在执行着色器期间传递到该着色器的范围。在执行着色器时,Flash Player 或 AIR 将计算影片剪辑的正常范围,然后基于 leftExtension、rightExtension、topExtension 和 bottomExtension 值扩展该范围。
默认值为 0.
public function get rightExtension():int public function set rightExtension(value:int):void| shader | 属性 |
shader:Shader [读写] | 语言版本: | ActionScript 3.0 |
| 运行时版本: | Flash Player 10, AIR 1.5 |
要为此滤镜使用的着色器。
分配给 shader 属性的着色器必须指定至少一个 image4 输入。不需要使用关联 ShaderInput 对象的 input 属性在代码中指定输入。而将应用了滤镜的对象自动用作第一个输入(index 为 0 的输入)。用作滤镜的着色器可以指定多个输入,而在这种情况下,如果要指定任何其他输入,则必须设置其 ShaderInput 实例的 input 属性。
如果为此属性分配一个 Shader 实例,则会在内部复制着色器,过滤操作将使用该内部副本,而不会引用原始着色器。对着色器所做的任何更改(例如更改参数值、输入或字节代码)不会应用到用于滤镜的着色器副本。若要使对着色器所做的更改能够影响滤镜输出,则必须将 Shader 实例重新分配给 shader 属性。对于所有滤镜,还必须将 ShaderFilter 实例重新分配给显示对象的 filters 属性才能应用滤镜更改。
public function get shader():Shader public function set shader(value:Shader):void| topExtension | 属性 |
topExtension:int [读写] | 语言版本: | ActionScript 3.0 |
| 运行时版本: | Flash Player 10, AIR 1.5 |
目标对象顶部的增大量(以像素为单位)。
该增大量是指超出目标对象范围并在执行着色器期间传递到该着色器的范围。在执行着色器时,Flash Player 或 AIR 将计算影片剪辑的正常范围,然后基于 leftExtension、rightExtension、topExtension 和 bottomExtension 值扩展该范围。
默认值为 0.
public function get topExtension():int public function set topExtension(value:int):void| ShaderFilter | () | 构造函数 |
public function ShaderFilter(shader:Shader = null)| 语言版本: | ActionScript 3.0 |
| 运行时版本: | Flash Player 10, AIR 1.5 |
创建新的着色器滤镜。
参数shader:Shader (default = null) —
要为此滤镜使用的着色器。有关详细信息以及着色器必须符合的限制,请参阅 shader 属性的说明。
|
另请参见
shader 属性。代码在 Sprite 实例中绘制一个圆并将其添加到舞台。加载着色器时,会对该 Sprite 应用着色器滤镜。
请注意,此示例假定在与应用程序的输出目录相同的目录中存在一个名为“gradient.pbj”的着色器字节码文件。
//
// Source code for the shader:
//
<languageVersion : 1.0;>
kernel RedGradientFilter
<
namespace: "Adobe::Example";
vendor: "Adobe examples";
version: 1;
description: "Applies a gradient across the red channel of the input image.";
>
{
input image4 src;
output pixel4 dst;
parameter float width
<
description: "The width of the image to which the shader is applied.";
minValue: 0.0;
>;
void evaluatePixel()
{
pixel4 temp = sampleNearest(src, outCoord());
temp.r = 1.0 - (outCoord().x * (1.0 / width));
dst = temp;
}
}
//
// ActionScript source code:
//
package {
import flash.display.Shader;
import flash.display.Sprite;
import flash.events.Event;
import flash.filters.ShaderFilter;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
public class ShaderFilterExample extends Sprite {
private var loader:URLLoader;
private var s:Sprite;
public function ShaderFilterExample() {
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, loadCompleteHandler);
loader.load(new URLRequest("gradient.pbj"));
s = new Sprite();
s.graphics.beginFill(0x009900);
s.graphics.drawCircle(100, 100, 100);
addChild(s);
}
private function loadCompleteHandler(event:Event):void {
var shader:Shader = new Shader(loader.data);
shader.data.width.value = [s.width];
var gradientFilter:ShaderFilter = new ShaderFilter(shader);
s.filters = [gradientFilter];
}
}
}