Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Не могу сообразить как заблурить часть картинки (http://www.flasher.ru/forum/showthread.php?t=116318)

orcpochta 26.09.2008 05:53

Не могу сообразить как заблурить часть картинки
 
Если прямоугольник для заблуривания не равен размеру самой картинки, то у меня какая-то чертовщина получается.
Объясните, как это работает?

darksranger 26.09.2008 07:23

в чем проблема то ?
копируем нужный участок и его блюрим

flash33 26.09.2008 11:34

Код:

import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.filters.BlurFilter;

var bmd:BitmapData = new BitmapData(80, 30, false, 0xFFCC00);
var rect:Rectangle = new Rectangle(10, 10, 40, 10);
bmd.fillRect(rect, 0xFF0000);

var pt:Point = new Point(10, 10);
var filter:BlurFilter = new BlurFilter();
bmd.applyFilter(bmd, rect, pt, filter);

Пример из help'а

orcpochta 26.09.2008 12:59

flash33, спасибо! торможу, да..))
Хотя в 8-м хелпе я такого примера не нашел.

upd:
А как лучше заблурить "рамку" у картинки?
Заблурить четыре прямоугольника по краям картинки или как-то еще можно? Например, что-нибудь вроде заблурить всю картинку, а потом центральный прямоугольник очистить от блура, если нечто подобное возможно, конечно.

upd2:
Почему следующая функция не дает желаемого результата? т.е. никаких видимых изменений с картинкой не происходит, хотя мною ожидалось, что мутное стекло будет ездить по картинке.
Код:

mcPict.onMouseMove = function():Void {
        var nW:Number = 60; //задаем ширину и высоту мутного стекла
        var nH:Number = 60;
        var nX:Number = this._xmouse - nW/2; //ставим стекло центром на мышь
        var nY:Number = this._ymouse - nH/2;       
        bmdPict = bmdPictClone.clone(); //клонируем битмап с заранее заготовленного клона для "очистки" картинки от предыдущих действий фильтров
        bmdPict.applyFilter(bmdPict, new Rectangle(nX, nY, nW, nH), new Point(nX, nY), filter); //накладываем мутное стекло
        updateAfterEvent();       
};


Wolsh 26.09.2008 14:33

orcpochta, Вас устроят резкие границы между блюр-рамкой и неблюр-картинкой?
Если да то копируем нужный Rectangle в BitmapData, потом блюрим всю картинку и помещаем сверху незаблюренный отпечаток.
Если же надо чтоб края постепенно заблюрились, используем градиентную маску и scale9grid.

orcpochta 26.09.2008 14:37

Цитата:

Сообщение от Wolsh (Сообщение 766554)
orcpochta, Вас устроят резкие границы между блюр-рамкой и неблюр-картинкой?
Если да то копируем нужный Rectangle в BitmapData, потом блюрим всю картинку и помещаем сверху незаблюренный отпечаток.
Если же надо чтоб края постепенно заблюрились, используем градиентную маску и scale9grid.

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

Посмотрите, пожалуйста, про функцию выше в upd2

Спасибо!

upd:
не знаю на сколько это рационально, но изменив код следующим образом получил требуемый эффект:
Код:

mcPict.onMouseMove = function():Void {
        var nW:Number = 60;
        var nH:Number = 60;
        var nX:Number = this._xmouse - nW/2;
        var nY:Number = this._ymouse - nH/2;       
        bmdPict.dispose();
        bmdPict = bmdPictClone.clone();
        this.attachBitmap(bmdPict, this.getNextHighestDepth());
        bmdPict.applyFilter(bmdPict, new Rectangle(nX, nY, nW, nH), new Point(nX, nY), filter);
        //updateAfterEvent(); - а он тут вообще нужен???
};

почему-то кажется, что updateAfterEvent(); тут совсем ни на что не влияет.

Wolsh 26.09.2008 18:37

На onMouseMove конечно нужен. Смысл апдейта в том, что движение мыши, вызывающее упомянутое событие, не совпадает по частоте с обновлением экрана. Если бы использовалось событие onEnterFrame - тогда конечно глупость))


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

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