Texturas com funções de ruído

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

Para modificar a aparência de um bitmap, você pode aplicar um efeito de ruído nele, usando o método noise() ou os métodos perlinNoise() . Um efeito de ruído pode ser comparado a um estático que aparece em uma tela de televisão não sintonizada.

Para aplicar um efeito de ruído a um bitmap, use o método noise() . Esse método aplica um valor de cor aleatório para pixels dentro de uma área especificada de uma imagem de bitmap.

Esse método aceita cinco parâmetros:

  • randomSeed (int): O número base aleatório que determina o padrão. Apesar do nome, esse número cria realmente os mesmos resultados se o mesmo número é transmitido. Para obter um resultado aleatório verdadeiro, use o método Math.random() para transmitir um número aleatório para esse parâmetro.

  • low (uint): Esse parâmetro se refere ao valor mais baixo a ser gerado para cada pixel (0 a 255). O valor padrão é 0. A configuração desse valor mais baixo resulta em um padrão de ruído mais escuro, enquanto a configuração de um valor mais alto resulta em um padrão mais claro.

  • high (uint): Esse parâmetro se refere ao valor mais alto a ser gerado para cada pixel (0 a 255). O valor padrão é 255. A configuração desse valor mais baixo resulta em um padrão de ruído mais escuro, enquanto a configuração de um valor mais alto resulta em um padrão mais claro.

  • channelOptions (uint): Esse parâmetro especifica a qual canal de cores do objeto Bitmap o padrão de ruído será aplicado. O número pode ser uma combinação de qualquer um dos quatro valores ARGB do canal de cores. O valor padrão é 7.

  • grayScale (Boolean): Quando definido para true , esse parâmetro aplica o valor randomSeed aos pixels de bitmap, eliminando efetivamente todas as cores da imagem. O canal alfa não é afetado por esse parâmetro. O valor padrão é false .

O exemplo a seguir cria uma imagem de bitmap e aplica um padrão de ruído azul a ela:

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

Se você quiser criar uma textura com a aparência mais orgânica, use o método perlinNoise() . O método perlinNoise() produz texturas orgânicas realistas que são ideais para fumaça, nuvens, água, fogo ou até mesmo explosões.

Como isso é gerado por um algoritmo, o método perlinNoise() usa menos memória do que as texturas com base em bitmap. Entretanto, ele pode ainda ter um impacto no uso do processador, tornando o conteúdo mais lento e fazendo com que a tela seja redesenhada mais lentamente do que a taxa de quadro, especialmente em computadores mais antigos. Isso deve-se principalmente aos cálculos de ponto de flutuação que precisam ocorrer para processar os algoritmos de ruído perlin.

O método aceita nove parâmetros (os primeiro seis são obrigatório):

  • baseX (Number): Determina o valor de x (tamanho) dos padrões criados.

  • baseY (Number): Determina o valor de y (tamanho) dos padrões criados.

  • numOctaves (uint): Número de oitavas ou funções de ruído individuais a serem combinadas para criar esse ruído. Números maiores de oitavas criam imagens com mais detalhes, mas também exigem mais tempo de processamento.

  • randomSeed (int): O número base aleatório funciona exatamente da mesma forma que na função noise() . Para obter um resultado aleatório verdadeiro, use o método Math.random() para transmitir um número aleatório para esse parâmetro.

  • stitch (Boolean): Se definido para true , esse método tentará suavizar as bordas de transição da imagem para criar texturas contínuas para colocação lado a lado como um preenchimento de bitmap.

  • fractalNoise (Boolean): Esse parâmetro relaciona as bordas de gradientes sendo geradas pelo método. Se definido para true , o método gerará ruído fractal que suaviza as bordas do efeito. Se definido como false , ocorre turbulência. Uma imagem com turbulência tem descontinuidades visíveis no gradiente que podem fazer com que ela aproxime melhor os efeitos visuais mais nítidos, como chamas e ondas do mar.

  • channelOptions (uint): O parâmetro channelOptions funciona exatamente da mesma forma que no método noise() . Ele especifica a qual canal de cores (do bitmap) o padrão de ruído será aplicado. O número pode ser uma combinação de qualquer um dos quatro valores ARGB do canal de cores. O valor padrão é 7.

  • grayScale (Boolean): O parâmetro grayScale funciona exatamente da mesma forma que no método noise() . Quando definido como true , esse parâmetro aplica o valor randomSeed aos pixels de bitmap, eliminando todas as cores da imagem de modo eficaz. O valor padrão é false .

  • deslocamentos (Matriz): Uma matriz de pontos que corresponde a deslocamentos x e y para cada oitava. Ao manipular os valores de deslocamento, você pode rolar suavemente as camadas de uma imagem. Cada ponto na matriz de deslocamento afeta uma função de ruído de oitava específica. O valor padrão é null.

O exemplo a seguir cria um objeto BitmapData de 150 x 150 pixels que chama o método perlinNoise() para gerar um efeito de nuvem em verde e azul:

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