![]() |
Помогите соптимизировать вычисления для повышения быстродействия
Вот простая функция. Она инвертирует альфу на битмапе (параллельно заливая черным цветом). Фиша в том, что если просто брать цвет из битмапа и класть его тут же на место, это будет работать на 45% быстрее чем моя функция. Получается что половину времени занимает строка, в которой вычисляется "с". Можно её както соптимизировать для двоичных вычислений?
Или вообще как-то по другому инвертить альфу битмапа.. Код:
static public function invertAlpha(bmp:flash.display.BitmapData, min_alpha:Number, max_alpha:Number):Void { |
Цитата:
|
глянь ColorTransform
в твоем случае что-то типа (трудно понять что на самом деле нужно): Код:
bmp.colorTransform(bmp.rectangle, new ColorTransform(0, 0, 0, (maxA-minA)/255, 0, 0, 0, 255-maxA)); |
Цитата:
silin всё правильно понял. проблема в том что я по дурацки назвал переменные -) Неочевидно что значит maxA и minA. На самом деле maxA - это максимальная прозрачность битмапа. minA, соответственно, ограничивает минимальное значение прозрачности (maxA < minA). Самое удивительное для меня - что функция colorTransform вообще не съедает ни сколько времени!! То есть ускорение 100% -) Но есть проблема: там где на битмапе были не-инициализированные точки, колорТрансформ оставляет пустоту (хотя getPixel возвращает 0, то есть прозрачный черный). Поскольку объяснять я не умею, выложил пример -) www.myxus.nm.ru/1/__sample.rar В примере экран заливается черным цветом с альфой minA, при этом в определенном месте оставляется пустое место. Потом в этом месте рисуется круг, блюрится, с него снимается битмап. И вот этот битмап я хочу проинвертировать. Смотреть только функцию invertAlpha(). Теперь я уже понимаю, что путем наименьшего сопротивления было нарисовать нужную форму в векторе, так что можно было бы обойтись без извратов с альфой.. Но раз уж колорТрансформ такой быстрый... Если с его помощью удастся решить проблему - было бы круто :-) |
Если я правильно понял, то надо взять BitmapData, с помощью copyChannel взять значение альфа канала, инвертнуть его и вернуть на место. И залить черным останые каналы.
|
всё так.
Я попробую. Спасибо. |
Цитата:
|
Я нашел решение, но это издевательство..
надо предварительно красить инфертируемую флешку в цвет 01000000, тогда colorTransform не глючит, но этож сипец. Никто не может поэлегантней придумать? |
| Часовой пояс GMT +4, время: 01:01. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.