Gürültü işlevleri ile doku oluşturma

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Bir bitmap'e, görünümünü değiştirmek için noise() veya perlinNoise() yöntemini kullanarak gürültü efekti uygulayabilirsiniz. Gürültü efekti, karıncalı gösteren bir televizyona benzetilebilir.

Bir bitmap'e gürültü efekti uygulamak için noise() yöntemini kullanın. Bu yöntem bir bitmap görüntünün belirli bir alanındaki piksellere rastgele bir renk değeri uygular.

Bu yöntem beş parametre kabul eder:

  • randomSeed (int): Deseni belirleyen rastgele tohum sayısı. Adının içinde rastgele ifadesi geçmesine rağmen, aynı sayı iletildiğinde bu sayı aynı sonuçları oluşturur. Gerçekten rastgele bir sonuç elde etmek için Math.random() yöntemini kullanarak bu parametreye rastgele bir sayı iletin.

  • low (uint): Bu parametre her bir piksel için üretilecek en düşük değeri belirtir (0-255). Varsayılan değer 0'dır. Bu değerin düşük olması daha koyu bir parazit deseni oluştururken daha yüksek bir değer verilmesi halinde daha parlak bir desen oluşacaktır.

  • high (uint): Bu parametre her bir piksel için üretilecek en yüksek değeri belirtir (0-255). Varsayılan değer 255'tir. Bu değerin düşük olması daha koyu bir gürültü deseni oluştururken daha yüksek bir değer verilmesi halinde daha parlak bir desen oluşacaktır.

  • channelOptions (uint): Bu parametre gürültünün bitmap nesnenin hangi kanalına uygulanacağını belirler. Bu sayı dört kanal ARGB değerlerinin her türlü kombinasyonu olabilir. Varsayılan değer 7'dir.

  • grayScale (Boolean): true değeri verildiğinde, bu parametre bitmap piksellerine randomSeed değerini uygulayarak görüntünün tüm renklerini siler. Alfa kanalı bu parametreden etkilenmez. Varsayılan değer false 'dır.

Aşağıdaki örnek bir bitmap görüntüsü oluşturur ve bu görüntüye mavi gürültü deseni uygular:

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

Daha canlı görünen bir doku oluşturmak isterseniz perlinNoise() yöntemini kullanın. perlinNoise() yöntemi duman, bulut, su, ateş ve hatta patlamalar için ideal olan gerçekçi ve canlı doku oluşturur.

Bir algoritma ile üretildiğinden perlinNoise() yöntemi bitmap tabanlı dokulardan daha az bellek kullanır. Ancak bu yine de, özellikle de eski bilgisayarlarda içeriğinizi yavaşlatarak ve ekranın kare hızından daha yavaş şekilde yeniden çizilmesine sebep olarak işlemci kullanımını etkileyebilir. Bunun ana nedeni perlin gürültü algoritmalarını işlemek için gereken kayan nokta hesaplamalarıdır.

Bu yöntem dokuz parametre kabul eder (ilk altısı gereklidir):

  • baseX (Number): Oluşturulan desenlerin x (boyut) değerini belirler.

  • baseY (Number): Oluşturulan desenlerin y (boyut) değerini belirler.

  • numOctaves (uint): Bu paraziti oluşturmak üzere birleştirilecek gürültü veya ayrı gürültü işlevleri sayısı. Oktav sayısının yüksek olması daha detaylı görüntülerin oluşturulmasını sağlasa da aynı zamanda daha fazla işleme süresi gerektirir.

  • randomSeed (int): Rastgele tohum sayısı aynen noise() işlevinde olduğu şekilde çalışır. Gerçekten rastgele bir sonuç elde etmek için Math.random() yöntemini kullanarak bu parametreye rastgele bir sayı iletin.

  • stitch (Boolean): Bu yöntem true değeri verildiğinde bitmap dolgusu olarak döşemek üzere eksiz dokular oluşturmak için görüntünün geçiş kenarlarını birleştirmeyi (veya düzgünleştirmeyi) dener.

  • fractalNoise (Boolean): Bu parametre, yöntemin oluşturduğu degradelerin kenarları ile ilgilidir. true değeri verildiğinde, yöntem efektin kenarlarını düzgünleştiren parçalı gürültü oluşturur. false değeri verildiğinde, türbülans oluşturur. Türbülanslı bir görüntünün degradesinde görünebilir kesintiler vardır, bu da alev veya deniz dalgası gibi keskin görsel efektleri daha gerçekçi hale getirir.

  • channelOptions (uint): channelOptions parametresi aynen noise() yönteminde olduğu şekilde çalışır. Gürültü deseninin uygulanacağı (bitmap) renk kanalını belirler. Bu sayı dört kanal ARGB değerlerinin her türlü kombinasyonu olabilir. Varsayılan değer 7'dir.

  • grayScale (Boolean): grayScale parametresi aynen noise() yönteminde olduğu şekilde çalışır. true değeri verildiğinde bu parametre bitmap piksellerine randomSeed değerini uygulayarak görüntünün tüm renklerini siler. Varsayılan değer false şeklindedir.

  • offsets (Dizi): Her bir oktavın x ve y uzaklıklarına karşılık gelen noktalar dizisi. Uzaklık değerlerini işleyerek, bir görüntünün katmanlarını sorunsuzca kaydırabilirsiniz. Uzaklık dizisindeki her nokta belirli bir oktav gürültü işlevini etkiler. Varsayılan değer null şeklindedir.

Aşağıdaki örnek, yeşil ve mavi bulut efekti oluşturmak için perlinNoise() yöntemini çağıran bir 150 x 150 piksel BitmapData nesnesi oluşturur.

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