В настоящее время невозможно проанализировать форму того, что вы нарисовали во время разработки (то есть выяснить, где находятся углы всех линий и заливок), поэтому единственный хороший способ нарисовать контур вокруг произвольной формы - это растровый эффект. Однако то, как вы это делаете, вероятно, не будет плодотворным. Flash дает вам несколько способов обработки растровых изображений, но все, что включает в себя циклическую обработку каждого пикселя, обычно оказывается недостаточно быстрым для использования во время выполнения.
Скорее, я бы выбрал один из двух подходов: лучшим и самым простым будет использование встроенных фильтров. Как вы говорите, обычно, когда люди хотят нарисовать контур, они используют светящийся фильтр с большой силой и коротким радиусом. Если вы хотите показать только контур, отметьте свойство knockout
. (Вы можете сделать это в скрипте или в IDE.) Если вам не нравится то, что вы получаете с этим, вы можете попробовать смешать фильтры - скажем, добавить размытие до или после свечения. Или вы можете использовать код для генерации эффекта свечения в пустое растровое изображение, а затем вы можете обрабатывать результат различными способами - например, с помощью BitmapData.threshold
, который, как я обнаружил, очень мощный. В любом случае, я бы поиграл с этим некоторое время и убедился, что это действительно не решит вашу проблему, прежде чем вы попробуете что-то другое, потому что это, безусловно, самое простое решение.
Другой вариант - PixelBender. Это функция, которая позволяет вам определять пользовательский фильтр на C-подобном языке, который вы предварительно компилируете, а затем загружаете в ваш Flash-фильм и применяете к рассматриваемому растровому изображению. Процесс очень похож на программирование фильтра фотошопа. Это дает вам полный контроль над тем, какую обработку вы хотите выполнять с растровым изображением, но требует, чтобы вы работали вне Flash и вне ActionScript.
Переход к текущему маршруту и ручная обработка пикселей - это, конечно, третий вариант, но вопрос в том, действительно ли вы делаете то, что не могли сделать в обычном или пользовательском фильтре. Если вы действительно хотите закончить то, что у вас есть, вы можете попробовать создать новое прозрачное растровое изображение, и для каждой точки, захваченной в приведенном выше коде, нарисуйте белую точку (с setPixel32) в этой точке. Это даст вам пиксельный контур, который вы, вероятно, захотите затем размыть или обработать другим способом. Но на самом деле вы получите нечто очень похожее на то, что вы могли бы получить с обычным светящимся фильтром, и это займет намного больше времени.