perlinNoise двух цветов

4 views
Skip to first unread message

Roma Oskolkov

unread,
Jul 1, 2009, 11:17:32 AM7/1/09
to ruflash
Всем привет.

Коллеги, никто не сталкивался с необходимостью генерить perlinNoise из двух цветов?
Ему можно задать grayScale = false и задавать каналы. Но это не работает.
А нужен тот же эффект как при grayScale = true, только чтобы переливались не оттенки от черного к белому, а, скажем от зеленого к красному.
Буду благодарен за совет.


Flop Serg

unread,
Jul 1, 2009, 11:21:54 AM7/1/09
to ruF...@googlegroups.com

А нужен тот же эффект как при grayScale = true, только чтобы переливались не оттенки от черного к белому, а, скажем от зеленого к красному.

Примени после фильтр colorTransform и всего делов

Roma Oskolkov

unread,
Jul 1, 2009, 11:29:29 AM7/1/09
to ruF...@googlegroups.com
ColorTransform какой-то стремный в обращении)
Требует этих своих значений от -255 до 255.

Roma Oskolkov

unread,
Jul 1, 2009, 11:41:12 AM7/1/09
to ruF...@googlegroups.com
И разве колортрансформом можно изменить два цвета одновремнно?
Он же накладывается на весь битмап.

Flop Serg

unread,
Jul 1, 2009, 12:01:16 PM7/1/09
to ruF...@googlegroups.com

ColorTransform какой-то стремный в обращении)
Требует этих своих значений от -255 до 255.

Да чутка стремный но значения можно подобрать.
В конкретно этом преобразовании (от зеленого к красному) будет вот такой
new ColorTransform(1,-1,-1,1,0,255,-255,0);

 

Flop Serg

unread,
Jul 1, 2009, 12:16:46 PM7/1/09
to ruF...@googlegroups.com
а есть еще такой фильтр ColorMatrixFilter он вообще цвета меняет как угодно его пробуй применять
например есть у quasimondo класс основанный на нем com.quasimondo.geom.ColorMatrix
в нем есть метод которым можно задать цвет colorize
тобиш результатом будет
светлые тона останутся светлыми
все темные останутся темными
средние - примут необходимый оттенок

можешь посмотреть как работает и сделать свое что-то которое будет задавать два цвета для темного и светлого
хотя думаю возможно этт тоже уже кто-то реализовал надо только найти

и вообще ColorMatrixFilter это аналог фотошоповского(и не только) Levels но без гаммы
тоесть кривую зависимость (входные цвета -> выходные цвета) сделать не получится будет только линейная

Roma Oskolkov

unread,
Jul 1, 2009, 12:25:52 PM7/1/09
to ruF...@googlegroups.com
О. 
Огромное спасибо.

Tatyana White

unread,
Jul 1, 2009, 2:47:53 PM7/1/09
to ruF...@googlegroups.com
синий и красный например:

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];

Roma Oskolkov

unread,
Jul 1, 2009, 2:59:52 PM7/1/09
to ruF...@googlegroups.com
Спасибо, Таня. Но я лишь для примера указал простые цвета.

Если отдать функции нойза что-то сложнее в духе 0x9FFB15 | 0xFD9F13
— он не поймет что нужен «градиентный» нойз между двумя этими цветами.
Будет много лишних цветов.

Tatyana White

unread,
Jul 1, 2009, 3:07:16 PM7/1/09
to ruF...@googlegroups.com
Если отдать функции нойза что-то сложнее в духе 0x9FFB15 | 0xFD9F13
— он не поймет что нужен «градиентный» нойз между двумя этими цветами.
Будет много лишних цветов.

Можно задавать только значения КАНАЛОВ. каналов всего 4: alpha, red, green, blue.
градиентный перлиннойз с выборочными цветами не предусмотрен. делайте чб и колорматриксфилтер.

w.

--

Татьяна Белая;
флэш экспериментатор;

On Jul 1, 2009, at 10:59 PM, Roma Oskolkov wrote:




Roma Oskolkov

unread,
Jul 1, 2009, 3:38:09 PM7/1/09
to ruF...@googlegroups.com
«делайте чб и колорматриксфилтер.»

Ага, мне уже Серж посоветовал.
Только кто бы научил пользоваться этим)

Oleg Dolya

unread,
Jul 1, 2009, 4:57:19 PM7/1/09
to ruF...@googlegroups.com
Можно еще c помощью paletteMap

Daniil Tutubalin

unread,
Jul 2, 2009, 12:10:07 AM7/2/09
to ruF...@googlegroups.com
Вариант 1 - через paletteMap

// сами объекты
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);

Roma Oskolkov

unread,
Jul 2, 2009, 6:39:43 AM7/2/09
to ruF...@googlegroups.com
Даниил, тысяча благодарностей тебе.
Буду пробовать.
Reply all
Reply to author
Forward
0 new messages