Actionscript 3: как очистить только часть графического объекта - PullRequest
1 голос
/ 10 мая 2011

Я делаю приложение Flash CS5, в котором пользователь рисует прозрачные наложения на спрайте, размещенном поверх изображения. Пользователь должен иметь возможность стереть свой ввод, как в MS Paint, Adobe Photoshop или GIMP. Поскольку спрайт находится поверх изображения, я не могу придумать безопасного прозрачного цвета для рисования раздела, над которым пользователь только что потер свой ластик.

Как я могу выполнить или смоделировать частичное удаление объекта Graphics?

1 Ответ

1 голос
/ 11 мая 2011

Действительно ли это должен быть Sprite, как в векторной графике?Может ли наложение быть растровым объектом?И хотите ли вы изменить цвет на уровне пикселей, как это делает кисть или ластик в MS Paint?

Если вам действительно не нужна векторная графика, я предлагаю вместо этого использовать растровый объект.Выполните следующие действия:

оверлей Sprite на самом деле является растровым оверлеем, обязательно сделайте его прозрачным

var bmp : Bitmap = new Bitmap( new BitmapData(imgWidth, imgHeight, true, 0));

вы создаете векторную графику во временном спрайте или событии лучше Shape, потому чтоне нужно сдерживать.

var tmpVectorGraphics : Shape = new Shape();
// draw whatever you want using the graphics library functions
drawStuffInShape(tmpVectorGraphics); 

теперь рисует содержимое векторной графики на растровых данных объекта Bitmap - преобразуя векторную графику в растровую графику

bmp.bitmapData.draw(tmpVectorGraphics);
// if what you've drawn in the shape containing the vector graphics is overlayed
// the same way as the bmp object, you don't need to specify a matrix object

, после этого вы можете очистить tmpVectorGraphics

tmpVectorGraphics.graphics.clear();

Чтобы очистить пиксели, как это делает ластик в Paint, вы можете создать прозрачную фигуру и скопировать ее в определенные позиции в растровом изображении.

// create the eraser bitmap data
var eraser : BitmapData = new BitmapData(5, 5, true, 0);
// this is the location of where you want the eraser to be applied
var pos : Point = new Point (locationX, locationY); 
// apply the eraser to the main bmp overlay to a specific location
bmp.bitmapData.copyPixels(eraseer, eraser.rect, pos);

Так что в любое время вы хотите добавитьДля некоторых графических изображений вы генерируете их в форме tmpVectorGraphics, а затем рисуете их на объекте Bitmap.Это также быстрее с точки зрения производительности, потому что чем больше графических команд вы выполнили, чтобы создать Shape, тем дороже он рендерится для каждого кадра.Растровое изображение кэшируется в памяти, и не имеет значения, насколько сложна в нем графика.

Есть много вещей, которые вы можете сделать с BitmapData в ActionScript, и это очень дешево с точки зрения скорости обработки, поэтому яПредлагаем вам поискать некоторые учебники по BitmapData, потому что вы можете сделать замечательное приложение для рисования, если знаете, как освоить этот класс:)

Приветствия, Михня

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