8 октября 2008. Сумасшедший ColorMatrixFilter

Игрался сегодня с фильтрами и битмапдатой и случайно обнаружил баг (баг ли?) в FlashPlayer 9.

Попробуйте в каком-нибудь из проектов, где динамически перерисовывается BitmapData, применить к ней фильтр flash.filters.ColorMatrixFilter со следующей матрицей:

var cmf:ColorMatrixFilter=new ColorMatrixFilter([1,0,0,0,8000,
                                                 0,1,0,0,8000,
                                                 0,0,1,0,8000,
                                                 0,0,0,1,0])


Это приведет к сумасшедшему результату в сочетании с BlurFilter. Передавать нужно именно 8000 в массив по указанным индексам. Почему 8000? Потому что в хелпе по BitmapData я наткнулся на информацию о том, что в пределах от -8000 до 8000 на процессорах Intel Pentium3 и старше используется ускорение для проведения вычислений. Ну, я и н задумываясь вставил это значение по индексу [4]. Если сделать хотя бы на единицу больше, то эффект пропадет.

Думаю, что это, все-таки баг на уровне плеера.

Посмотреть результат можно по ссылке ниже.

ВНИМАНИЕ! Если вы страдаете эпилепсией, то флешку лучше не смотреть. Я вас предупреждал.

Посмотреть можно тут (нужно подвигать мышью, для демонстрации эффекта).

Исходник этого можно взять отсюда.

Update

Ребята с хабра помогли тестами собрать информацию о платформах, подверженных багу. Чуть позже упорядочили запишу тестовые данные для Adobe.

В Adobe пока отписан баг без этого списка.


Тэги:

0
Разных мыслей по теме

Выразите свои мысли по теме.