Показать сообщение отдельно
Старый 08.07.2008, 02:07
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
>> Если использовать ByteArray, то, боюсь, операции выборки рабочих пикселей будут съедать весь возможный прирост скорости.

Чет мне сомнительно...

фильтрами особо не увлекался, но из последнего, что делал - загрузчик + конвертор BMP формата. Тесты делались на картинках 720х480, загрузить, отрендерить и выслать 200 картинок занимало чуть больше 2 минут. т.е. 69120000 х 2 пикселей за 120000 мс (около 580мс на картинку включая пересылку в один конец в локальной файловой системе) т.е. примерно 1К пикселей в мс.

Прекалькуляция, где только возможно...
Вот это забить в константу, ну или по крайней мере, локальную переменную:
Код:
Math.pow((radius*2+1), 2);
т.е. посчитать 1 раз и больше не трогать

Умножение на два, деление на два с целыми числами быстрее будет работать, если использовать битовые операции, не существенно, но все же:
т.е. х * 2 == х << 1

Код:
var operatingBitmapData:BitmapData = new BitmapData(bitmapData.width, bitmapData.height);
operatingBitmapData = bitmapData.clone();
->
Код:
var operatingBitmapData:BitmapData = bitmapData.clone();
Мелочь, но все же

убрать все объявления переменных из тела цикла, если значение переменной не меняется, или возможен только ограниченый набор значений - вынести их в константы.

Код:
public static function boxBlur(bitmapData:BitmapData, radius:int = 1):BitmapData
		{
			....
			for (var i:int = 0; i < bitmapData.width; i++)
			{
				for (var f:int = 0; f < bitmapData.height; f++)
				{
					....
					var weightDivider:int = Math.pow((radius*2+1), 2);
					for (var g:int = 0; g < (radius*2+1); g++)
....
Код:
private static const weightDividerPow = 9;
private static const weightDivider = 3;
public static function boxBlur(bitmapData:BitmapData, radius:int = 1):BitmapData
		{
			....
			for (var i:int = 0; i < bitmapData.width; i++)
			{
				for (var f:int = 0; f < bitmapData.height; f++)
				{
					....
					weightDividerPow;
					....
					for (var g:int = 0; g < weightDivider; g++)
....
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 08.07.2008 в 02:34.