А нужен тот же эффект как при grayScale = true, только чтобы переливались не оттенки от черного к белому, а, скажем от зеленого к красному.
ColorTransform какой-то стремный в обращении)Требует этих своих значений от -255 до 255.
var bmp:BitmapData = new BitmapData(300,300);
addChild(new Bitmap(bmp));
bmp.perlinNoise(100,100,2,2,false,true, BitmapDataChannel.BLUE |
BitmapDataChannel.RED);
w.
--
Татьяна Белая;
флэш экспериментатор;
[http://0xFFFFFF.ru | in...@0xFFFFFF.ru];
Если отдать функции нойза что-то сложнее в духе 0x9FFB15 | 0xFD9F13
— он не поймет что нужен «градиентный» нойз между двумя этими цветами.
Будет много лишних цветов.
// сами объекты
var bmp:BitmapData = new BitmapData(600,600,false,0);
addChild(new Bitmap(bmp));
// подготавливаем массив
var colors:Array = new Array(256);
for (var i=0; i<256; i++) {
colors[i] = (i << 16) + (255-i);
}
// перлин
bmp.perlinNoise(100,100,3,0,false,false,7,true);
// перекраска (2 пустых массива обязательно)
bmp.paletteMap(bmp,bmp.rect,new Point(), colors, [], []);
Плюсы такого подхода:
1. Подходит не только для 2 цветов, можно составить любую палитру,
хоть радугу, хоть что угодно. В том числе можно составить массив
ручками (все 256 цветов).
2. Скорость должна быть достаточно хорошей (возможно даже лучше, чем
при использовании фильтра).
Вариант 2 - через ColorMatrixFilter
// сами объекты
var bmp:BitmapData = new BitmapData(600,600,false,0);
addChild(new Bitmap(bmp));
// задаём два цвета в виде RGB-триплетов
// первый соответствует чёрному
// второй белому
var color1:Array = [0xFF, 00, 00];
var color2:Array = [0x00, 00, 0xFF];
// матрица и фильтр
var colorMatrix:Array = [
(color2[0]-color1[0])/255, 0, 0, 0, color1[0],
(color2[1]-color1[1])/255, 0, 0, 0, color1[1],
(color2[2]-color1[2])/255, 0, 0, 0, color1[2],
0, 0, 0, 0, 1];
var filter:ColorMatrixFilter = new ColorMatrixFilter(colorMatrix);
// перлин
bmp.perlinNoise(100,100,3,0,false,false,7,true);
// перекраска
bmp.applyFilter(bmp,bmp.rect,new Point(),filter);