Форум 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)
-   -   Ускорение BlurFilter (http://www.flasher.ru/forum/showthread.php?t=104820)

aQuestion 03.12.2007 12:43

Цитата:

Сообщение от Adobe
The amount of... blur... Values that are a power of 2 (such as 2, 4, 8, 16 and 32) are optimized to render more quickly than other values.

отсюда родилась такая мысль, заменять не-двоестепенные фильтры дающими близкий результат двоестепенными, например new BlurFilter (3, 3, 1) на new BlurFilter (2, 2, 3). вопрос №1, соответственно, как посчитать подходящий параметр квалити?

Цитата:

Сообщение от Adobe
Although you can use additional numeric values up to 15 to increase the number of times the blur is applied, higher values are rendered more slowly. Instead of increasing the value of quality, you can often get a similar effect, and with faster rendering, by simply increasing the values of the blurX and blurY properties.

отсюда вопрос №2, какое значение квалити делает вышеописанную замену бесмысленной?

окей, по вопросу №1 предварительные результаты таковы:
Код:

function getBlurParams (blurAmount:Number)
{
        var lesserAmount:Number = Math.pow (2,
                Math.floor (parseFloat ((Math.log (blurAmount) * Math.LOG2E).toFixed(8))));
        // assume linear dependance on (blurAmount - lesserAmount)
        // border cases: must be 1 for 0, and 3 for 1
        var quality:Number = 1 +
                2 * (blurAmount - lesserAmount);
        return [ lesserAmount, quality ];
}

for (var i=2; i<10; i++)
        trace (i + ": " + getBlurParams (i));

и вывод сего:
Цитата:

Сообщение от Output tab
2: 2,1
3: 2,3
4: 4,1
5: 4,3
6: 4,5
7: 4,7
8: 8,1
9: 8,3

если посмотреть на примере 7: 4,7, то "ширину мазка" такая эвристика подбирает неплохо, но "резкость", разумеется и рядом не валялась. по вопросу №2 мне кажется такие значения квалити (от 3х и выше) сделают замену принципиально нецелесообразной, но надобно проверить.

edit: по вопросу №2,
Код:

import flash.display.BitmapData;
import flash.filters.BlurFilter;
import flash.geom.Point;
import flash.utils.getTimer;

var bd:BitmapData = new BitmapData (123, 456, true, 789);
var i:uint = 0, t:uint = 0, p:Point = new Point ();

var f1:BlurFilter = new BlurFilter (3, 3, 1);
var f2:BlurFilter = new BlurFilter (2, 2, 3);

t = getTimer ()
for (i=0; i<1000; i++)
        bd.applyFilter (bd, bd.rect, p, f1);
trace (getTimer () - t);

t = getTimer ()
for (i=0; i<1000; i++)
        bd.applyFilter (bd, bd.rect, p, f2);
trace (getTimer () - t);

дает 15хх против 17хх, а в случае 7,7,1 против 4,4,7 - 15хх против 36хх.

ВЫВОД: на идею забиваем.


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

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