PDA

Просмотр полной версии : Работа с фильтрами


Волгоградец
29.04.2008, 16:36
Привет! Спецы, подскажите, каким фильтром пройтись по БитмапДате с целью изменения прозрачности пикселов. Например, есть изображение, грузим его в BitmapData, при определенных действиях в некоторых местах этого изображения пикселы должны стать прозрачными (подчиняясь определенным формулам). Важно быстродействие.

etc
29.04.2008, 16:50
threshold

Волгоградец
29.04.2008, 17:21
Не, _etc, это не подойдет. У меня нет порогового значения. Я даже не знаю как обяснить... Прозрачность меняется по определенному закону - одни пикселы тускнеют, другие становятся ярче. Я могу описать прозрачность каждого и назначить ее в цикле каждому пикселу. Но если у меня картинка 800х600, то зависнет мой цикл, а хотелось бы динамически это делать... Ведь convolutionFilter, colorTransform работают очень быстро...

iNils
29.04.2008, 17:28
Если прозрачность меняется для каждого пикселся, а не для маски в целом (например заливка градиентом), то более быстрого способа нет. Если же вся маска меняется целиком, то просто надо заменить канал.

Волгоградец
29.04.2008, 17:38
Мда... Жаль... Спасибо.

flash33
30.04.2008, 00:24
copyChannel. Создай битмап source, где, к примеру, управляющим каналом будет BitmapDataChannel.RED, затем для targetBitmapData...
targetBitmapData.copyChannel(source, new Rectangle(0, 0, source.width, source.height), new Point(0, 0), BitmapDataChannel.RED, BitmapDataChannel.ALPHA); и вуаля

Волгоградец
30.04.2008, 10:25
Не, тоже не прокатит. Идея такая была - вожу мышкой по рабочему полю и прозрачность меняется динамически - прямо под мышкой пиксел полностью непрозрачный, а отходя в стороны пикселы прозрачность теряют. Как будто маска.

iNils
30.04.2008, 10:34
Волгоградец, определитесь прозрачность меняется по формуле формулам, либо по маске. Если последнее, то это как раз то, что я вам говорил, а flash33 привел пример.
На каждом шаге у вас есть базовая маска, вы копируют ее в канал иззображения, а потом в этот же канал добавляете свою маску в нужно место и область (аргументы 2 и 3 метода copyChannel)

etc
30.04.2008, 10:57
http://etcs.ru/blog/shit/fog_of_war/

Волгоградец
30.04.2008, 11:08
Нет, маски нет - я это написал чтобы яснее выразить идею. Прозрачность меняется по формулам - формула одинаковая для всех пикселов - в ней есть аргумент - расстояние до мыши. Т.е. на каждом шаге заново просчитывается для каждого пиксела. Я думал есть фильтр - типа ColorMatrixFilter, только составляющая цвета меняется не на одинаковую величину, а в зависимости от некоторой величины, скажем того же расстояния до мышки. Но теперь я вижу, что это не так. Всем спасибо.

iNils
30.04.2008, 11:48
Прозрачность меняется по формулам - формула одинаковая для всех пикселов - в ней есть аргумент - расстояние до мыши. Т.е. на каждом шаге заново просчитывается для каждого пикселаНо маска ведь таже самая остается?

Волгоградец
30.04.2008, 12:53
Гм... Я видать не шарю. А что значит маска?