Реализация стирания для объектов Bitmap

9 просмотров
Перейти к первому непрочитанному сообщению

MaxZ

не прочитано,
2 окт. 2009 г., 08:22:3502.10.2009
– ruFlash
Всем доброго дня!
Реализую следующую задачу: рисование с использованием в качестве кисти
произвольного MovieClip-а и

удаление нарисованного ранее. Возникли проблемы со стиранием
нарисованного изображения:
1)стирание в отличии от рисования съедает много ресурсов
2)при стирании не происходит фактического стирания и изменения высоты
и ширины контейнера

Рисование реализовал так:
создал прозрачную bitmapData и записал туда мувик(star_mc) который
хочу использовать как кисть.

bd = new BitmapData(star_mc.width, star_mc.height,true,0);
bd.draw(star_mc);

и при MOUSE_DOWN и MOUSE_MOVE создаю и добавляю в спрайт
drawingContainer Bitmap-ы на основе вышесозданной bd:

var bitmap:Bitmap = new Bitmap(bd);
drawingContainer.addChild(bitmap);
drawingContainer.blendMode = BlendMode.LAYER;
drawingContainer.cacheAsBitmap = true;

Стирание сделал так:
при MOUSE_DOWN и MOUSE_MOVE добавляю в drawingContainer спрайт с
blendMode = BlendMode.ERASE чтобы удалялось то, что под ним;

var eraserClip:Sprite = new Sprite();
eraserClip.blendMode = BlendMode.ERASE;
eraserClip.graphics.beginFill(0xffffff, 1);
eraserClip.graphics.drawEllipse(0, 0, 20, 20);
eraserClip.cacheAsBitmap = true;
drawingContainer.addChild(eraserClip);

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

Flop Serg

не прочитано,
2 окт. 2009 г., 08:34:2402.10.2009
– ruf...@googlegroups.com
создай батмапу одну с максималными нужными размерами и прозрачностью
при рисовании и стирании изменяй только битмапату методами битмапдаты
никаких контейнеров не надо
у тебя же клипов плодится аццкая туча!

Artemyev Dmitriy

не прочитано,
2 окт. 2009 г., 08:40:5802.10.2009
– ruf...@googlegroups.com
методами draw() и applyFilter(...)

--
Flash/Flex developer
------------------------------------------------
skype: dimas_art
tel: +38 (068) 4749190
Ukraine, Crimea, Simferopol

Regards, Artemyev Dmitriy

Daniil Tutubalin

не прочитано,
2 окт. 2009 г., 11:27:1402.10.2009
– ruf...@googlegroups.com
Кисть:

brush = new BitmapData(star_mc.width, star_mc.height,true,0);
brush.draw(star_mc);

Бумага (холст):

paper = new BitmapData(800, 600, true, 0);
addChild(new Bitmap(paper));

Рисуем:

var m:Matrix = new Matrix();
m.translate(mouseX, mouseY);
paper.draw(brush, m);

Стираем:

var m:Matrix = new Matrix();
m.translate(mouseX, mouseY);
paper.draw(brush, m, null, BlendMode.ERASE);

MaxZ

не прочитано,
2 окт. 2009 г., 11:44:4002.10.2009
– ruFlash
Всё чётко заработало :-) Спасибо всем большое за помощь, особенно
Даниилу.
Ответить всем
Отправить сообщение автору
Переслать
0 новых сообщений