若要修改點陣圖的外觀,您可以使用
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
。
下列範例會建立點陣圖影像,並將藍色的雜訊圖樣套用至該影像:
package
{
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;
public class BitmapNoise1 extends Sprite
{
public function BitmapNoise1()
{
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()
方法來產生綠色與藍色雲狀效果:
package
{
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;
public class BitmapNoise2 extends Sprite
{
public function BitmapNoise2()
{
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);
}
}
}