Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   DisplacementMapFilter (http://www.flasher.ru/forum/showthread.php?t=117972)

incvizitor 11.11.2008 23:51

DisplacementMapFilter
 
Так как я ничего не понял из примеров по DisplacementMapFilter, решил попробовать создать свой эффект. Но как я и ожидал - не работает. Помогите пожалуста. И если кто может объясните как работают эти фильтры...:wacko:

А вот и тот бред что я написал:

Код AS3:

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);
                }
        }
}


_Smirnoff 12.11.2008 00:03

field.autoSize="left";

Используй константы TextAutoSize например, так правильнее. Когда я попытался юзать draw и туда засовывать TextField,то у меня ужасно выглядела надпись.Даже нашел багу на адобе, где расписано, как правильно отрисовать текстфилд, но без результатно, в зависимости от контекста, он был читаем или нет.

Rzer 12.11.2008 00:05

При создании нового фильтра, ты в качестве канала для x и y координаты указал 1,1 что соответствует красному каналу или BitmapDataChannel.RED. Новый bitmapData у тебя создается без указания цвета фона, а значит он берется по умолчанию 0xffffffff.

Шрифт белого цвета по каналу ред также имеет значение 255 как и фон. Соответственно для фильтра в ред канале не происходит никаких изменений.

incvizitor 12.11.2008 00:07

Цитата:

Сообщение от _Smirnoff (Сообщение 776285)
field.autoSize="left";

Используй константы TextAutoSize например, так правильнее. Когда я попытался юзать draw и туда засовывать TextField,то у меня ужасно выглядела надпись.Даже нашел багу на адобе, где расписано, как правильно отрисовать текстфилд, но без результатно, в зависимости от контекста, он был читаем или нет.

Изменил, но результат каким был таким и остался

Добавлено через 5 минут
Цитата:

Сообщение от Rzer (Сообщение 776286)
При создании нового фильтра, ты в качестве канала для x и y координаты указал 1,1 что соответствует красному каналу или BitmapDataChannel.RED. Новый bitmapData у тебя создается без указания цвета фона, а значит он берется по умолчанию 0xffffffff.

Шрифт белого цвета по каналу ред также имеет значение 255 как и фон. Соответственно для фильтра в ред канале не происходит никаких изменений.

Спасибо, работает. Но функционирование этого фильтра я всё же не доконца понял...

_Smirnoff 12.11.2008 00:21

http://www.ultrashock.com/forums/act...elp-91027.html

Почитай, может поможет понять.

Rzer 12.11.2008 00:30

Могу объяснить. Предположим мы будем работать в RED канале. Значение 128 или 0x80 не дает сдвига поэтому будем использовать цвет 0x80808080 в качестве фона для битмап даты. Предположим на карте дисплейсмента мы нарисовали белую точку (значение 255 в ред канале) это означает, что в эту точку (где точка была нарисована) мы вернем точку на 128 пикселей правее и наоборот если точка черная мы мы возьмем точку на 128 пикселей левее. Если же мы используем битмап дату для фильтра белого цвета - вся картинка будет сдвинута на 128 пикселей в лево (точки берутся справа и рисуются на 128 левее) (128 пикселей это для большей наглядности - настраивается через параметр scaleX/scaleY)

Например, чтобы добиться эффекта лупы. В центре должен быть нейтральный цвет 0x80 и меняться к краям лупы (к левому краю соответственно становиться более светлым (пиксели будут браться ближе к центру), а к правому более темным)

incvizitor 12.11.2008 01:09

Цитата:

Сообщение от Rzer (Сообщение 776303)
Могу объяснить. Предположим мы будем работать в RED канале. Значение 128 или 0x80 не дает сдвига поэтому будем использовать цвет 0x80808080 в качестве фона для битмап даты. Предположим на карте дисплейсмента мы нарисовали белую точку (значение 255 в ред канале) это означает, что в эту точку (где точка была нарисована) мы вернем точку на 128 пикселей правее и наоборот если точка черная мы мы возьмем точку на 128 пикселей левее. Если же мы используем битмап дату для фильтра белого цвета - вся картинка будет сдвинута на 128 пикселей в лево (точки берутся справа и рисуются на 128 левее) (128 пикселей это для большей наглядности - настраивается через параметр scaleX/scaleY)

Например, чтобы добиться эффекта лупы. В центре должен быть нейтральный цвет 0x80 и меняться к краям лупы (к левому краю соответственно становиться более светлым (пиксели будут браться ближе к центру), а к правому более темным)

Ну уже что то проясняется:yahoo:. Но что это за RED канал??? И чем он отличается от других??? В общем я многое понял из того что ты сказал. Большое тебе спасибо!!!!!!!!!!!:drinks:

Rzer 12.11.2008 01:17

Любой цвет формируется по четырем каналам RED GREEN BLUE и ALPHA (смотри класс BitmapDataChannel) Белый цвет 0xffffff 255 по первым трем каналам, черный 0. Открой в Паинте ColorPicker (выбор цвета по палитре) и ты там заметишь, что любой цвет отражается тремя числами. Использовать в фильтре дисплейса можно как один и тот же канал, так и два разных канала (например чтобы по оси х картинку растягивать, а по у сжимать) А как уж ты нарисовал картинку для искажения - это уже другой вопрос. ALPHA 0 - непрозрачный, 255 - абсолютно прозрачный.

incvizitor 12.11.2008 01:34

Цитата:

Сообщение от Rzer (Сообщение 776328)
Любой цвет формируется по четырем каналам RED GREEN BLUE и ALPHA (смотри класс BitmapDataChannel) Белый цвет 0xffffff 255 по первым трем каналам, черный 0. Открой в Паинте ColorPicker (выбор цвета по палитре) и ты там заметишь, что любой цвет отражается тремя числами. Использовать в фильтре дисплейса можно как один и тот же канал, так и два разных канала (например чтобы по оси х картинку растягивать, а по у сжимать) А как уж ты нарисовал картинку для искажения - это уже другой вопрос. ALPHA 0 - непрозрачный, 255 - абсолютно прозрачный.

Что такое RBG я знаю :). То что ты написал, я понимаю так: Если я использую канал RED, то мой фильтр не изменится от того что mapBitmap будет цвета 0xff0000 или 0xffffff. Но если я могу прописать разные опции для разных каналов, то как выбирать эти каналы???

Rzer 12.11.2008 01:38

Цитата:

То что ты написал, я понимаю так: Если я использую канал RED, то мой фильтр не изменится от того что mapBitmap будет цвета 0xff0000 или 0xffffff.
Да все так.

Код AS3:

var f=new DisplacementMapFilter(new BitmapData(bmpData.width,bmpData.height) ,new Point(0,0), BitmapDataChannel.RED, BitmapDataChannel.BLUE, 200, 200, DisplacementMapFilterMode.IGNORE);
 
.

для x - канал красный, для y синий


Часовой пояс GMT +4, время: 19:39.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.