使用雜訊函數製作紋理
Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本
若要修改點陣圖的外觀,您可以使用 noise() 方法或是 perlinNoise() 方法,在點陣圖上套用雜訊效果。雜訊效果可以比喻為出現在未調頻之電視螢幕上的電波干擾。
若要將雜訊效果套用到點陣圖,請使用 noise() 方法。這個方法會將隨機的顏色值套用到點陣圖影像的指定區域內。
此方法可接受五個參數:
randomSeed (int):決定圖樣的隨機種子數值。雖然其名稱為如此,如果傳遞相同的數目,此數目實際上會建立相同的結果。為了取得真正隨機的結果,請使用 Math.random() 方法為此參數傳遞隨機號碼。
low (uint):此參數指的是要為每個像素所產生的最低值 (0 到 255),預設值為 0。設定此值會降低在較黑的雜訊圖樣中的結果,而將它設定為較高的值會導致較亮的圖樣。
high (uint):此參數指的是要為每個像素所產生的最高值 (0 到 255),預設值為 255。設定為較小的值時,會產生較暗的雜訊圖樣;而設定為較大的值則會產生較亮的圖樣。
channelOptions (uint):此參數會指定雜訊圖樣將套用的點陣圖物件之顏色色版。此數字可以是任何四個顏色色版 ARGB 值的組合,預設值為 7。
grayScale (Boolean):設定為 true 時,此參數會將 randomSeed 值套用至點陣圖像素,可有效地將影像的所有顏色洗掉。此參數不受 Alpha 色版的影響。預設值為 false。
下列範例會建立點陣圖影像,並將藍色的雜訊圖樣套用至該影像:
import flash.display.Bitmap;
import flash.display.BitmapData;
var myBitmap:BitmapData = new BitmapData(250, 250,false, 0xff000000);
myBitmap.noise(500, 0, 255, BitmapDataChannel.BLUE,false);
var image:Bitmap = new Bitmap(myBitmap);
addChild(image);
如果您想要建立看起來更有組織的紋理,請使用 perlinNoise() 方法。perlinNoise() 方法會產生寫實且具組織性的紋理,適用於煙霧、雲狀、水、火或甚至是爆炸效果。
因為它是由演算法所產生,所以比起點陣圖紋理,perlinNoise() 方法會使用更少的記憶體。然而,它對於處理器使用率仍然有影響,因此會使內容變慢,造成重繪螢幕的速度比影格速率更慢,特別是較舊的電腦更是如此。這主要是為了處理 Perlin 雜訊演算法,因此需要執行浮點數計算。
此方法會採用九個參數 (前六個為必要參數):
baseX (Number):決定所建立圖樣的 x (大小) 值。
baseY (Number):決定所建立圖樣的 y (大小) 值。
numOctaves (uint):建立此雜訊所需結合的 octave 或是個別的雜訊函數數量。較大的 octave 數字所建立的影像能呈現更細膩的畫質,但是也需要更多的處理時間。
randomSeed (int):隨機種子數字的運作方式與它在 noise() 函數中的運作方式完全相同。為了取得真正隨機的結果,請使用 Math.random() 方法為此參數傳遞隨機號碼。
stitch (Boolean):如果設定為 true,則此方法會嘗試柔合 (平滑化) 影像的轉場邊緣,以建立無接縫的拼貼紋理做為點陣圖填色。
fractalNoise (Boolean):此參數與此方法所產生的漸層邊緣有關。如果設定為 true,則此方法會產生不規則雜訊,以平滑化該效果的邊緣。如果設定為 false,則會造成湍流化。帶有亂流的影像具有明顯不連續的漸層,可讓它產生較逼近、鮮明的視覺特效,例如火焰和海浪。
channelOptions (uint):channelOptions 參數的運作方式與它在 noise() 方法中的運作方式完全相同。它會指定雜訊圖樣所套用的點陣圖顏色色版。此數字可以是任何四個顏色色版 ARGB 值的組合,預設值為 7。
grayScale (Boolean):grayScale 參數的運作方式與它在 noise() 方法中的運作方式完全相同。如果設定為 true,它會將 randomSeed 值套用至點陣圖像素,可有效地將影像的所有顏色洗掉。預設值為 false。
offsets (Array):對應至每個 octave 之 x 和 y 偏移的點陣列。藉由操作偏移值,您可以平順地捲動影像的圖層。在偏移陣列中的每個點都會影響特定的 octave 雜點函數。預設值是 null。
下列範例將建立一個 150 x 150 像素的 BitmapData 物件,它會呼叫 perlinNoise() 方法來產生綠色與藍色雲狀效果:
import flash.display.Bitmap;
import flash.display.BitmapData;
var myBitmapDataObject:BitmapData = new BitmapData(150, 150, false, 0x00FF0000);
var seed:Number = Math.floor(Math.random() * 100);
var channels:uint = BitmapDataChannel.GREEN | BitmapDataChannel.BLUE
myBitmapDataObject.perlinNoise(100, 80, 6, seed, false, true, channels, false, null);
var myBitmap:Bitmap = new Bitmap(myBitmapDataObject);
addChild(myBitmap);