flash.filters
public class ShaderFilter
继承ShaderFilter Inheritance BitmapFilter Inheritance Object

语言版本: ActionScript 3.0
运行时版本: Flash Player 10, AIR 1.5

ShaderFilter 类通过对应用了滤镜的对象执行着色器来应用滤镜。应用了滤镜的对象将用作着色器输入,而着色器输出将用作滤镜效果。

若要创建新的滤镜,请使用构造函数 new ShaderFilter()。滤镜的具体使用取决于要应用滤镜的对象:

如果对显示对象应用滤镜,则该对象的 cacheAsBitmap 属性值将设置为 true。如果删除所有滤镜,将恢复 cacheAsBitmap 的原始值。

此滤镜支持舞台缩放。但是,它不支持常规缩放、旋转和倾斜。 如果对象本身进行了缩放(如果 scaleXscaleY 属性未被设置为 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 属性的值。

若要允许着色器输出超出已过滤对象的范围,请使用 leftExtensionrightExtensiontopExtensionbottomExtension 属性。

查看示例

另请参见

flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
flash.display.BitmapData.applyFilter()
flash.display.Shader


公共属性
 属性定义方
  bottomExtension : int
目标对象底部的增大量(以像素为单位)。
ShaderFilter
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  leftExtension : int
目标对象左侧的增大量(以像素为单位)。
ShaderFilter
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
  rightExtension : int
目标对象右侧的增大量(以像素为单位)。
ShaderFilter
  shader : Shader
要为此滤镜使用的着色器。
ShaderFilter
  topExtension : int
目标对象顶部的增大量(以像素为单位)。
ShaderFilter
公共方法
 方法定义方
  
ShaderFilter(shader:Shader = null)
创建新的着色器滤镜。
ShaderFilter
 Inherited
返回 BitmapFilter 对象,它是与原始 BitmapFilter 对象完全相同的副本。
BitmapFilter
 Inherited
指示对象是否已经定义了指定的属性。
Object
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
设置循环操作动态属性的可用性。
Object
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
属性详细信息
bottomExtension属性
bottomExtension:int  [读写]

语言版本: ActionScript 3.0
运行时版本: Flash Player 10, AIR 1.5

目标对象底部的增大量(以像素为单位)。

该增大量是指超出目标对象范围并在执行着色器期间传递到该着色器的范围。在执行着色器时,Flash Player 或 AIR 将计算影片剪辑的正常范围,然后基于 leftExtensionrightExtensiontopExtensionbottomExtension 值扩展该范围。

默认值为 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 将计算影片剪辑的正常范围,然后基于 leftExtensionrightExtensiontopExtensionbottomExtension 值扩展该范围。

默认值为 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 将计算影片剪辑的正常范围,然后基于 leftExtensionrightExtensiontopExtensionbottomExtension 值扩展该范围。

默认值为 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 将计算影片剪辑的正常范围,然后基于 leftExtensionrightExtensiontopExtensionbottomExtension 值扩展该范围。

默认值为 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 属性的说明。

另请参见

示例 如何使用示例
ShaderFilterExample.1.as

下面的示例中加载了一个着色器,并将其用作 ShaderFilter 的 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];
        }
    }
}