![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
|
Вот простая функция. Она инвертирует альфу на битмапе (параллельно заливая черным цветом). Фиша в том, что если просто брать цвет из битмапа и класть его тут же на место, это будет работать на 45% быстрее чем моя функция. Получается что половину времени занимает строка, в которой вычисляется "с". Можно её както соптимизировать для двоичных вычислений?
Или вообще как-то по другому инвертить альфу битмапа.. static public function invertAlpha(bmp:flash.display.BitmapData, min_alpha:Number, max_alpha:Number):Void {
var w:Number = bmp.width;
var h:Number = bmp.height;
var c:Number;
var coef:Number = -(max_alpha - min_alpha)/255;
for(var i:Number=0;i<w;i++) {
for(var j:Number=0;j<h;j++) {
c = (0xFF - (bmp.getPixel32(i, j)>>24)&0xFF) * coef + max_alpha;
bmp.setPixel32(i, j, c<<24);
}
}
}
|
|
|||||
|
глянь ColorTransform
в твоем случае что-то типа (трудно понять что на самом деле нужно): Последний раз редактировалось silin; 18.10.2006 в 22:27. |
|
|||||
|
Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
|
Цитата:
silin всё правильно понял. проблема в том что я по дурацки назвал переменные -) Неочевидно что значит maxA и minA. На самом деле maxA - это максимальная прозрачность битмапа. minA, соответственно, ограничивает минимальное значение прозрачности (maxA < minA). Самое удивительное для меня - что функция colorTransform вообще не съедает ни сколько времени!! То есть ускорение 100% -) Но есть проблема: там где на битмапе были не-инициализированные точки, колорТрансформ оставляет пустоту (хотя getPixel возвращает 0, то есть прозрачный черный). Поскольку объяснять я не умею, выложил пример -) www.myxus.nm.ru/1/__sample.rar В примере экран заливается черным цветом с альфой minA, при этом в определенном месте оставляется пустое место. Потом в этом месте рисуется круг, блюрится, с него снимается битмап. И вот этот битмап я хочу проинвертировать. Смотреть только функцию invertAlpha(). Теперь я уже понимаю, что путем наименьшего сопротивления было нарисовать нужную форму в векторе, так что можно было бы обойтись без извратов с альфой.. Но раз уж колорТрансформ такой быстрый... Если с его помощью удастся решить проблему - было бы круто :-) |
|
|||||
|
Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
|
Цитата:
|
|
|||||
|
Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
|
всё так.
Я попробую. Спасибо. Последний раз редактировалось MyXus; 19.10.2006 в 16:39. |
|
|||||
|
Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
|
Я нашел решение, но это издевательство..
надо предварительно красить инфертируемую флешку в цвет 01000000, тогда colorTransform не глючит, но этож сипец. Никто не может поэлегантней придумать? |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|