Показать сообщение отдельно
Старый 03.12.2007, 12:43
aQuestion вне форума Посмотреть профиль Найти все сообщения от aQuestion
  № 1  
Ответить с цитированием
aQuestion
Banned
 
Аватар для aQuestion

Регистрация: Dec 2005
Сообщений: 556
Цитата:
Сообщение от 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хх.

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


Последний раз редактировалось iNils; 03.12.2007 в 15:42.