2016-10-31 3 views
1

Я чувствую, что мне что-то не хватает, поэтому, надеюсь, на этот вопрос будет дан ответ быстро.AS3 Растровые изображения и фильтры

Я начинаю использовать blitting, чтобы сделать мою программу более эффективной из-за количества объектов, перемещающихся по экрану. И сейчас я тестирую, как поступать по-другому; Я до фильтров.

Я пытаюсь применить простой фильтр свечения, используя applyFilter(); Проблем:

а) Он работает только тогда, когда я определяю прямоугольник как bitmapData.generateFilterRect(), который не является проблемой, кроме

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

Оригинал Grass Плитка
Original Grass Tile

Grass Плитка с Glow Фильтр применяется
Grass Tile with Glow Filter applied

Что я здесь отсутствует?

public function applyFilter(filter:*):void{ 
    bitmapData.applyFilter(bitmapData, bitmapData.generateFilterRect(new Rectangle(0,0, 100, 100), filter), new Point(0,0), filter); 
} 

grass.applyFilter(new GlowFilter(0x000000)); 
+1

Из любопытства, почему бы вам не использовать [Starling] (http://gamua.com/starling/), если вы пытаетесь получить производительность? – Marty

+1

Мне нравится писать свои собственные движки, чтобы узнать больше. –

+0

Использование Starling на самом деле не убирает вашу способность писать собственный движок, хотя он охватывает в основном то же количество вещей, что и с использованием встроенного API 'flash.display. *' Для вас (только часть рендеринга). – Marty

ответ

1

Это может быть ваша проблема:

После применения фильтра, полученного изображения может быть больше, чем на входном изображении. Например, если вы используете класс BlurFilter для размытия исходного прямоугольника (50,50,100,100) и точки назначения (10,10), область, которая изменяется в целевом изображении, больше (10,10,60,60)) из-за размытости. Это происходит во время вызова applyFilter().

Source.

Похоже, вам нужно рассчитать размер нового изображения и нарисовать его на экране, а не на оригинальном размере.

+0

Да, поэтому я использую BitmapData.generateFilterRect(). Я даже попытался расширить параметр Rectangle, чтобы дать ему дополнительную комнату, но он все еще растёт. –

+0

Можете ли вы добавить код, который вы используете, чтобы нарисовать изображение результата на экране? Поскольку похоже, что вы просто что-то упустили, чтобы учесть новый больший размер, который будет включать обрезанную часть. Примеры в вашем вопросе одинакового размера. – Marty

+0

Все данные помещаются на экран где-то в другом месте. Это то, что применяет фильтр. –

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