Skapa texturer med brusfunktioner

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Om du vill ändra utseendet på en bitmapp kan du använda en bruseffekt med hjälp av metoden noise() eller perlinNoise() . En bruseffekt kan liknas vid den statiskhet som uppträder på en ej avstämd teveskärm.

Om du vill tillämpa en bruseffekt på en bitmapp använder du metoden noise() . Metoden använder ett godtyckligt färgvärde för pixlarna inom ett angivet område av en bitmappsbild.

Metoden godkänner fem parametrar:

  • randomSeed (int): ett godtyckligt startvärde som anger mönstret. Trots namnet skapas samma resultat om samma värde skickas. Om du vill få ett sant godtyckligt resultat använder du metoden Math.random() för att skicka ett godtyckligt värde för den här parametern.

  • low (uint): den här parametern refererar till det lägsta värde som ska genereras för varje pixel (0 till 255). Standardvärdet är 0. Om du anger ett lägre värde får du ett mörkare brusmönster och om du anger ett högre värde får du ett ljusare mönster.

  • high (uint): den här parametern refererar till det högsta värde som ska genereras för varje pixel (0 till 255). Standardvärdet är 255. Om du anger ett lägre värde får du ett mörkare brusmönster och om du anger ett högre värde får du ett ljusare mönster.

  • channelOptions (uint): den här parametern anger på vilken färgkanal för bitmappsobjektet som brusmönstret ska tillämpas. Värdet kan vara en kombination av några av de fyra ARGB-färgkanalsvärdena. Standardvärdet är 7.

  • grayScale (Boolean): om värdet är true tillämpas värdet randomSeed på bitmappspixlarna, vilket effektivt tar bort alla färger från bilden. Alfakanalen påverkas inte av den här parametern. Standardvärdet är false .

I följande exempel skapas en bitmappsbild och tillämpas ett blått brusmönster:

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); 
        } 
    } 
}

Om du vill skapa en mer organisk textur använder du metoden perlinNoise() . Med metoden perlinNoise() skapas realistiska organiska texturer som är idealiska för rök, moln, vatten, eld och även explosioner.

Eftersom metoden perlinNoise() genereras av en algoritm använder den mindre minne än bitmappsbaserade texturer. Den kan däremot fortfarande påverka processoranvändningen, så att det tar längre tid att visa innehåll och skärmen ritas om långsammare än bildrutehastigheten, särskilt på gamla datorer. Detta beror huvudsakligen på flyttalsberäkningarna som måste utföras för att Perlin-brusalgoritmerna ska bearbetas.

Metoden godkänner nio parametrar (de första sex är obligatoriska):

  • baseX (Number): anger x-värdet (storlek) för skapade mönster.

  • baseY (Number): anger y-värdet (storlek) för skapade mönster.

  • numOctaves (uint): antal oktaver eller enskilda brusfunktioner som ska kombineras för att detta brus ska uppstå. Ju fler oktaver desto högre detaljrikedom får bilderna, men detta kräver också längre bearbetningstid.

  • randomSeed (int): det godtyckliga startnumret fungerar på samma sätt som i funktionen noise() . Om du vill få ett sant godtyckligt resultat använder du metoden Math.random() för att skicka ett godtyckligt värde för den här parametern.

  • stitch (Boolean): Om värdet är true försöker metoden maska (eller jämna ut) övergångskanterna i bilden för att skapa sömlösa texturer när en bitmappsfyllning används.

  • fractalNoise (Boolean): Den här parametern relateras till kanterna på de övertoningar som genereras av metoden. Om värdet är true genereras fraktalbrus som jämnar ut kanterna. Om värdet är false genereras turbulens. En bild med turbulens har synliga avbrott i övertoningen som kan göra den bättre på att visa skarpare visuella effekter, till exempel flammor eller vågor på havet.

  • channelOptions (uint): Parametern channelOptions fungerar på samma sätt som i metoden noise() . Den anger vilken färgkanal (för bitmappen) som brusmönstret ska tillämpas på. Värdet kan vara en kombination av några av de fyra ARGB-färgkanalsvärdena. Standardvärdet är 7.

  • grayScale (Boolean): Parametern grayScale fungerar på samma sätt som i metoden noise() . Om värdet är true tillämpas värdet randomSeed på bitmappspixlarna, vilket effektivt tar bort alla färger från bilden. Standardvärdet är false .

  • offsets (Array): En array med punkter som motsvarar x- och y-förskjutningar för varje oktav. Om du ändrar förskjutningsvärdena kan du rulla lagren i bilden på ett jämnt sätt. Varje punkt i förskjutningsarrayen påverkar en viss oktavbrusfunktion. Standardvärdet är null.

I följande exempel skapas ett BitmapData-objekt på 150 x 150 pixlar som anropar metoden perlinNoise() för att generera en grön och blå molneffekt:

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); 
        } 
    } 
}