Для изменения вида растрового изображения можно применить к нему шумовой эффект с помощью метода
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
.
В примере ниже показано, как создавать растровое изображение и применить к нему синий шум.
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()
генерируется алгоритмом, ему требуется меньше памяти, чем текстурам на основе растровых изображений. Тем не менее, он может снижать быстродействие процессора и замедлять обработку содержимого, в результате чего экран будет перерисовываться медленнее, особенно на старых компьютерах. Это происходит из-за вычислений с плавающей точкой, которые нужны для обработки алгоритмов шума Перлина.
Этот метод принимает девять параметров (первые шесть обязательны).
-
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()
.
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);
}
}
}