国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

12.9.使用Convolution Filter創建漸變效果

2024-04-27 13:52:14
字體:
來源:轉載
供稿:網友
12.9.1 問題
我想要使用ConvolutionFilter 在MXML 組件上創建一個TweenEffect。
12.9.2 解決辦法
創建一個TweenEffectInstance 類,在onTweenUpdate 事件的回調方法中實例化新的
ConvolutionFilter 實例并將這些ConvolutionFilter 實例分配到目標DisplayObject 的過濾器數組。
12.9.3 討論
ConvolutionFilter 用一種柔和的方式變換它的目標DisplayObject 或BitmapImage,允許效果的創建進行例如模糊,邊緣檢測,打磨,浮雕和斜角。源圖片的每個象素都會根據周圍的像素值進行轉化。每個象素的轉化都由傳入ConvolutionFilter 構造器的Matrix 數組參數來決定。ConvolutionFilter 的構造器申明如下:
public function ConvolutionFilter(matrixX:Number = 0, matrixY:Number = 0, matrix:Array
= null, divisor:Number = 1.0, bias:Number = 0.0, preserveAlpha:Boolean = true,
clamp:Boolean = true, color:uint = 0, alpha:Number = 0.0)

一點一點地仔細看看:
matrixX:Number (default = 0)
這個數字代表矩陣的列數。

matrixY:Number (default = 0)
這個指定了矩陣的行數。

matrix:Array (default = null)
這個數組的值用以決定如何轉化每個象素。數組內元素的數字個數應與matrixX 乘以matrixY 的結果相同。

divisor:Number (default = 1.0)
該參數指定矩陣轉化和ConvolutionFilter 如何應用矩陣計算的約數。如果對矩陣值求和,總和將會是一個平均分配色彩強度的約數。

bias:Number (default = 0.0)
該參數是對矩陣變換結果添加的偏好設置參數。

preserveAlpha:Boolean (default = true)
值為false 表明不保存alpha 值并且convolution 會應用到所有通道,包括alpha 通道。
True 值則表示convolution 僅僅應用到顏色通道。

clamp:Boolean (default = true)
針對源圖片之外的像素,值為true 表示會在輸入圖片邊緣處通過復制邊緣處的顏色值來擴展圖片的邊框。值為false 表示會在指定color 和alpha 屬性時使用該色值。
默認值是true。

color:uint (default = 0)
十六進制顏色數值,填充源圖片周圍的邊框像素顏色。

alpha:Number (default = 0.0)
填充顏色的透明度。

此處的TweenEffect 類像12.8 節當中的TweenEffect 類一樣,在它所使用的TweenEffectInstances 類里面使用ConvolutionFilter。
+展開
-ActionScript
package oreilly.cookbook{
import mx.effects.IEffectInstance;
import mx.effects.TweenEffect;
public class ConvolutionTween extends TweenEffect
{
//創建新EffectInstance時可能會傳入的值如下:
public var toAlpha:Number;
public var fromAlpha:Number;
public var toColor:uint;
public var fromColor:uint;
public var fromMatrix:Array;
public var toMatrix:Array;
public var toDivisor:Number;
public var fromDivisor:Number;
public var toBias:Number;
public var fromBias:Number;
public function ConvolutionTween(target:Object=null)
{
super(target);
this.instanceClass = ConvolutionTweenInstance;
}

下面是每個新建ConvolutionTweenInstance 類實例屬性設置:
+展開
-ActionScript
override protected function
initInstance(instance:IEffectInstance):void {
trace(" instance initialized ");
super.initInstance(instance);
// now that we've instantiated our instance, we can set
its properties
ConvolutionTweenInstance(instance).toAlpha = toAlpha;
ConvolutionTweenInstance(instance).fromAlpha =
fromAlpha;
ConvolutionTweenInstance(instance).toColor = toColor;
ConvolutionTweenInstance(instance).fromColor =
fromColor;
ConvolutionTweenInstance(instance).fromMatrix =
fromMatrix;
ConvolutionTweenInstance(instance).toMatrix = toMatrix;
ConvolutionTweenInstance(instance).toDivisor =
toDivisor;
ConvolutionTweenInstance(instance).fromDivisor =
fromDivisor;
ConvolutionTweenInstance(instance).toBias = toBias;
ConvolutionTweenInstance(instance).fromBias = fromBias;
}
override public function getAffectedProperties():Array {
trace(" return all the target properties ");
return [];
}
}
}

ConvolutionTweenInstance 從ConvolutionTweenEffect 工廠類那里獲取它的目標對象和屬性值。
+展開
-ActionScript
package oreilly.cookbook{
import flash.filters.ConvolutionFilter;
import mx.effects.Tween;
import mx.effects.effectClasses.TweenEffectInstance;
public class ConvolutionTweenInstance extends
TweenEffectInstance
{
private var convolutionFilter:ConvolutionFilter;
public var toAlpha:Number;
public var fromAlpha:Number;
public var toColor:uint;
public var fromColor:uint;
public var fromMatrix:Array;
public var toMatrix:Array;
public var toDivisor:Number;
public var fromDivisor:Number;
public var toBias:Number;
public var fromBias:Number;
public function ConvolutionTweenInstance(target:Object) {
super(target);
}

在覆蓋的play 方法中,每一個起始值(代表著ConvolutionFilter 的初始化值)和終止值(代表著應用到目標的ConvolutionFilter 的終點值),傳入Tween 實例。
+展開
-ActionScript
override public function play():void {
this.tween = new Tween(this,
[fromMatrix[0], fromMatrix[1], fromMatrix[2],
fromMatrix[3],fromMatrix[4],fromMatrix[5],
fromMatrix[6], fromMatrix[7], fromDivisor,
fromBias, fromAlpha, fromColor],
[toMatrix[0], toMatrix[1], toMatrix[2], toMatrix[3],
toMatrix[4], toMatrix[5], toMatrix[6], toMatrix[7], ,
toDivisor, toBias, toAlpha, toColor],duration);
convolutionFilter = new ConvolutionFilter(fromMatrixX,
fromMatrixY, fromMatrix, 1.0, 0, truetrue,
fromAlpha, fromColor);
}

每個來自Tween 的新值都作為對象傳入onTweenUpdate。在該對象內,0 起始的數組里,存儲了從初始化狀態到結束狀態之間任一給定時間點的轉換狀態值。因為ConvolutionFilter 需要一個數組作為參數,數組里面的每個值都是中間狀態值,然后作為ConvolutionFilter 的矩陣參數傳入一個新數組。
+展開
-ActionScript
override public function onTweenUpdate(value:Object):void {
//get the filters from the target
var filters:Array = target.filters;
// Remove any existing Displacement filter to ensure
that ours is the only one
var n:int = filters.length;
for (var i:int = 0; i < n; i++) {
if (filters[i] is ConvolutionFilter)
filters.splice(i, 1);
//create the new filter
convolutionFilter = new ConvolutionFilter(3, 3,
[value[0], value[1], value[2], value[3], value[4], value[5],
value[6], value[7]], value[8], value[9] truetrue, value[10],
value[11]); //add the filter to the target
filters.push(convolutionFilter);
target.filters = filters;
}
}
}

注:所有應用到目標對象上的ConvolutionFilters 都要移除。如果不這樣做,多個ConvolutionFilters 的效果會疊加地應用到目標對象上去,造成與預期有很大差別的效果。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丰宁| 南丹县| 青神县| 隆德县| 南昌县| 东光县| 自贡市| 八宿县| 田林县| 阿合奇县| 天祝| 九龙县| 余干县| 吴江市| 长寿区| 武功县| 洛川县| 习水县| 邵阳市| 蒙阴县| 富锦市| 石林| 化州市| 武宁县| 汨罗市| 乌兰浩特市| 泊头市| 恩平市| 永康市| 中山市| 镇雄县| 沽源县| 日照市| 万源市| 耒阳市| 电白县| 怀仁县| 澄迈县| 木兰县| 房产| 巴楚县|