Ограничить фильтр видимым экраном - Actionscript 3 - PullRequest
1 голос
/ 03 августа 2009

В настоящее время я работаю в FlexSDK / AS3 и у меня есть холст, содержащий много объектов. Холст большой - около 4K x 4K пикселей, и я много занимаюсь масштабированием / масштабированием / прокруткой. Область просмотра составляет всего около 800x450.

Я пытаюсь применить фильтр размытия к холсту - который я выяснил, и он отлично работает, за исключением этой маленькой ошибки:

Фильтр не применяется, если результирующее изображение превышает максимальные размеры. В AIR 1.5 и Flash Player 10 максимальная ширина или высота составляет 8 191 пиксель, а общее количество пикселей не может превышать 16 777 215 пикселей. (Таким образом, если изображение имеет ширину 8191 пиксель, его высота может составлять только 2048 пикселов.) В Flash Player 9 и более ранних версиях, а также в AIR 1.1 и более ранних версиях ограничение составляет 2880 пикселей по высоте и 2880 пикселей по ширине. Например, если вы увеличиваете крупный фрагмент ролика с примененным фильтром, фильтр отключается, если результирующее изображение превышает максимальные размеры. - AS3 документы

Когда я уменьшаю масштаб, мой фильтр работает нормально. Но при увеличении ограничение по пикселям нарушается, и фильтр не работает.

Поскольку для размытия требуется только видимая на данный момент часть экрана - срез 800x450 - есть ли способ выборочного размытия только этой части экрана?

1 Ответ

2 голосов
/ 03 августа 2009

Я не думаю, что вы можете назначить регион DisplayObject для применения фильтра. Это все или ничего.

Насколько сложным является содержание холста? Являются ли элементы интерактивными? Можете ли вы разделить их на более мелкие прямоугольники и поместить их в сетку?

Если это просто изображение или группа изображений, вы можете скопировать видимую часть в объект BitmapData . Вы бы скрыли большой холст и отображали только растровые данные, используя растровый объект. Вы можете добавить прослушиватель для событий масштабирования и прокрутки, а затем при необходимости обновить BitmapData и Bitmap.

Если это группа интерактивных элементов управления, я думаю, что ваш лучший вариант - объединить их в сетку. Затем вы можете применить размытие ко всем ячейкам сетки (каждая имеет меньший размер).

Имейте в виду, что размытие такого большого количества пикселей будет настоящей потерей производительности!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...