Для изменения вида растрового изображения можно применить к нему шумовой эффект с помощью метода 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 к пикселам растрового изображения и убирает цвет из изображения. Этот параметр не влияет на альфа-канал. Значение по умолчанию равно 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() генерируется алгоритмом, ему требуется меньше памяти, чем текстурам на основе растровых изображений. Тем не менее, он может снижать быстродействие процессора и замедлять обработку содержимого, в результате чего экран будет перерисовываться медленнее, особенно на старых компьютерах. Это происходит из-за вычислений с плавающей точкой, которые нужны для обработки алгоритмов шума Перлина.
Этот метод принимает девять параметров (первые шесть обязательны).
baseX (Number): определяет значение x (размер) создаваемого узора.
baseY (Number): определяет значение y (размер) создаваемого узора.
numOctaves (uint): количество октав или индивидуальных функций шума, которые необходимо объединить с целью создания шума. При большем количестве октав создаются более детализированные изображения, но и времени на обработку требуется больше.
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): массив точек, соответствующих смещениям в направлениях x и y для каждой октавы. Изменяя значения смещения, можно плавно прокручивать слои изображения. Каждая точка в массиве смещения применяется к функции шума конкретной октавы. Значение по умолчанию — null.
В следующем примере создается объект BitmapData размером 150 х 150 пикселов, для создания эффекта зеленых и синих облаков на котором вызывается метод 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);