![]() |
|
||||||||||
|
|||||
|
Так как я ничего не понял из примеров по DisplacementMapFilter, решил попробовать создать свой эффект. Но как я и ожидал - не работает. Помогите пожалуста. И если кто может объясните как работают эти фильтры...
![]() А вот и тот бред что я написал: package fl.bmpEff { import flash.display.Bitmap; import flash.display.BitmapData; import flash.filters.DisplacementMapFilter; import flash.filters.DisplacementMapFilterMode; import flash.text.*; import flash.geom.* public class WaveFilter { public function WaveFilter(bmp:Bitmap) { var bmpData=bmp.bitmapData; var f=new DisplacementMapFilter(new BitmapData(bmpData.width,bmpData.height) ,new Point(0,0), 1, 1, 200, 200, DisplacementMapFilterMode.IGNORE); var field=txtField(); var mtrx=new Matrix(1,0,0,1,100,100); f.mapBitmap.draw(field,mtrx); bmp.filters=[f]; } private function txtField() { var field=new TextField(); field.text="kuku"; var format=new TextFormat(); format.size=300; format.color=0xffffff; format.bold=true; field.setTextFormat(format); field.autoSize="left"; field.x=100; field.y=100; return(field); } } } |
|
|||||
|
field.autoSize="left";
Используй константы TextAutoSize например, так правильнее. Когда я попытался юзать draw и туда засовывать TextField,то у меня ужасно выглядела надпись.Даже нашел багу на адобе, где расписано, как правильно отрисовать текстфилд, но без результатно, в зависимости от контекста, он был читаем или нет.
__________________
Оптимизация производительности на уровне кода |
|
|||||
|
При создании нового фильтра, ты в качестве канала для x и y координаты указал 1,1 что соответствует красному каналу или BitmapDataChannel.RED. Новый bitmapData у тебя создается без указания цвета фона, а значит он берется по умолчанию 0xffffffff.
Шрифт белого цвета по каналу ред также имеет значение 255 как и фон. Соответственно для фильтра в ред канале не происходит никаких изменений.
__________________
if (love is true) break my.heart; |
|
|||||
|
Цитата:
Добавлено через 5 минут Цитата:
|
|
|||||
|
__________________
Оптимизация производительности на уровне кода |
|
|||||
|
Могу объяснить. Предположим мы будем работать в RED канале. Значение 128 или 0x80 не дает сдвига поэтому будем использовать цвет 0x80808080 в качестве фона для битмап даты. Предположим на карте дисплейсмента мы нарисовали белую точку (значение 255 в ред канале) это означает, что в эту точку (где точка была нарисована) мы вернем точку на 128 пикселей правее и наоборот если точка черная мы мы возьмем точку на 128 пикселей левее. Если же мы используем битмап дату для фильтра белого цвета - вся картинка будет сдвинута на 128 пикселей в лево (точки берутся справа и рисуются на 128 левее) (128 пикселей это для большей наглядности - настраивается через параметр scaleX/scaleY)
Например, чтобы добиться эффекта лупы. В центре должен быть нейтральный цвет 0x80 и меняться к краям лупы (к левому краю соответственно становиться более светлым (пиксели будут браться ближе к центру), а к правому более темным)
__________________
if (love is true) break my.heart; Последний раз редактировалось Rzer; 12.11.2008 в 00:45. |
|
|||||
|
Цитата:
. Но что это за RED канал??? И чем он отличается от других??? В общем я многое понял из того что ты сказал. Большое тебе спасибо!!!!!!!!!!!![]() |
|
|||||
|
Любой цвет формируется по четырем каналам RED GREEN BLUE и ALPHA (смотри класс BitmapDataChannel) Белый цвет 0xffffff 255 по первым трем каналам, черный 0. Открой в Паинте ColorPicker (выбор цвета по палитре) и ты там заметишь, что любой цвет отражается тремя числами. Использовать в фильтре дисплейса можно как один и тот же канал, так и два разных канала (например чтобы по оси х картинку растягивать, а по у сжимать) А как уж ты нарисовал картинку для искажения - это уже другой вопрос. ALPHA 0 - непрозрачный, 255 - абсолютно прозрачный.
__________________
if (love is true) break my.heart; Последний раз редактировалось Rzer; 12.11.2008 в 01:23. |
|
|||||
|
Цитата:
. То что ты написал, я понимаю так: Если я использую канал RED, то мой фильтр не изменится от того что mapBitmap будет цвета 0xff0000 или 0xffffff. Но если я могу прописать разные опции для разных каналов, то как выбирать эти каналы??? |
|
|||||
|
Цитата:
для x - канал красный, для y синий
__________________
if (love is true) break my.heart; |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:39. |
|
|
« Предыдущая тема | Следующая тема » |
|
|