2009-12-30 2 views
0

У меня есть объект BitmapData с альфа-каналом. Я хотел бы узнать способ ускорения смещения этого альфа-канала в ActionScript3 (FlashPlayer10). Посредством смещения я имею в виду сдвиг всех пикселей этого канала в одном направлении (обтекание границ изображения), оставляя цветные каналы такими, какие они есть.преобразовать один канал объекта BitmapData

Есть ли хороший способ применить такое преобразование только к одному каналу?

ответ

0

Я думаю, что я бы решил заняться созданием клона() исходного объекта bitmapData. Оставьте оригинал неповрежденным. С помощью клона сдвиньте все пиксели так, как вы хотите. Там нет встроенного «свитка с переносом», но это не слишком сложно. Вот код для одного, но вы можете упростить это много, если вы делаете только одно направление:

http://www.actionscript.org/forums/showthread.php3?p=767722

После прокрутки используйте copyChannel(), чтобы скопировать альфа-канал из вашего прокручивать клона обратно к оригиналу.

+0

спасибо, прекрасно работает – BuschnicK

0

Вы должны использовать Adobe PixelBender для такого рода операций или написать это вручную (используя getVector/setVector) в ActionScript. Однако смещение альфа-канала звучит как плохая идея, так как все цвета хранятся с предварительно умноженной альфой.

Это означает, что у вас будет постоянная потеря точности.

+0

Хмм, никогда не слышал о заранее умноженном альфа-трюке раньше. Спасибо, что указали это. Интересно, действительно ли это приносит пользу производительности. Похоже, спорный компромисс, когда модификация растровых изображений становится намного дороже из-за этого ... – BuschnicK

Смежные вопросы