Просмотр полной версии : Не могу сообразить как заблурить часть картинки
orcpochta
26.09.2008, 05:53
Если прямоугольник для заблуривания не равен размеру самой картинки, то у меня какая-то чертовщина получается.
Объясните, как это работает?
darksranger
26.09.2008, 07:23
в чем проблема то ?
копируем нужный участок и его блюрим
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();
};
orcpochta, Вас устроят резкие границы между блюр-рамкой и неблюр-картинкой?
Если да то копируем нужный Rectangle в BitmapData, потом блюрим всю картинку и помещаем сверху незаблюренный отпечаток.
Если же надо чтоб края постепенно заблюрились, используем градиентную маску и scale9grid.
orcpochta
26.09.2008, 14:37
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(); тут совсем ни на что не влияет.
На onMouseMove конечно нужен. Смысл апдейта в том, что движение мыши, вызывающее упомянутое событие, не совпадает по частоте с обновлением экрана. Если бы использовалось событие onEnterFrame - тогда конечно глупость))
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.