Стирание определенной выбранной части растрового изображения - PullRequest
0 голосов
/ 20 апреля 2011

Я создаю приложение Flash Paint. Основная структура такова.

У меня есть два слоя, а именно topLayer_mc и bottomLayer_mc. Фактический векторный рисунок рисуется на верхнем слое и onmouseUp инструмента, битовая копия векторной графики на верхнем слое берется и добавляется в качестве растрового изображения на нижний слой. Верхний слой очищается впоследствии. Это работает для инструмента карандаша.

Теперь мне нужно создать инструмент ластика. Здесь все становится сложнее. В приложении есть возможность сохранить изображение в формате png, поэтому альфа должна быть сохранена сверху. Таким образом, традиционный метод рисования кисти, использующий вектор и метод рисования растрового изображения, не будет работать. Конечно, на визуальном уровне это будет работать, если кисть, нарисованная с использованием вектора, будет иметь тот же цвет, что и цвет фона.

Мне нужно просто стереть пиксели.

Теперь я создал кисть, используя обычную технику, и очистка возможна, но мне нужно точно стереть пиксели. Есть какая-то техника, чтобы нарисовать это?

Это код, который я использую:

Я также загрузил swf и исходный код,

http://bobbythecoder.blogspot.com/2011/04/doubt-bitmap.html

При испытании, пожалуйста, рисуйте по всей сцене карандашом (нажмите кнопку Карандаш и начните рисовать)

Источник fla также указан,

http://www.easy -share.com / 1914823453 / Кисть Expt.fla

Я некоторое время очень старался, поэтому буду очень признателен, если вы сможете помочь.

topLayer_mc и bottomLayer_mc теперь имеют нулевое значение альфа.

Я также не создал перетаскиваемую кисть, только две жестко закодированные позиции очищаются. Чтобы нарисовать карандашом, просто нажмите кнопку карандаша и нарисуйте. Чтобы очистить, просто нажмите кнопку ластика.

Мне нужна техника, чтобы стереть пиксели в области, отмеченной кистью, а не просто рисовать над ней.

Ответы [ 4 ]

2 голосов
/ 20 апреля 2011

Если вы выберете документацию AS3, вы найдете несколько важных вещей.Прежде всего, вы пытаетесь рисовать с помощью blendmode «erase» ( BlendMode.ERASE ), который работает только в том случае, если у родительского растрового изображения DisplayObject его blendMode изменен с flash.display.BlendMode.NORMAL до flash.display.BlendMode.LAYER .Если вы намерены использовать режим стирания, я рекомендую использовать константу flash.display.BlendMode.ERASE вместо жесткого кодирования литерала «стирание» из соображений прямой совместимости.

Но .. вы, возможно, не собираетесьиспользуйте BlendMode.ERASE , вы выбрали это намеренно с полным знанием того, как это работает?Нет необходимости использовать этот режим наложения с BitmapData.Для вашего инструмента стирания должно быть достаточно использовать BlendMode.NORMAL с вашей операцией BitmapData.draw () и рисовать прозрачные пиксели цвета 0x00000000, которые вы получите, указав beginFill (0x000000, 0);

1 голос
/ 28 октября 2011

Вы можете создать растровое изображение , заполнить его green rectangle, а затем нарисовать red fill circle. Теперь вы можете использовать copyChannel , использовать исходный канал в качестве GREEN и целевой канал в качестве Alpha. Таким образом, это приведет к созданию эффекта стирания с помощью круглой кисти .

1 голос
/ 20 апреля 2011

Рисование прозрачных пикселей (любой цвет с 0 альфа) должно помочь!

0 голосов
/ 20 апреля 2011

Думаю, я бы создал третий прозрачный клип для стирания.Когда вы нажмете на него, удерживая инструмент стирания, просто наведите на него кружок.

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