Вопрос

Есть ли способ применить colorTransform к BitmapData в круге, а не в прямоугольнике?

Вместо того, чтобы стирать прямоугольные части изображения путем уменьшения альфа-канала, как в коде ниже, я бы хотел сделать это кругами.

 _bitmap.colorTransform(new Rectangle(mouseX-d/2, mouseY-d/2, d, d),
 new ColorTransform(1, 1, 1, .5, 0, 0, 0, 1));

У меня есть код, который перебирает пиксели, извлекает значение альфа и использует setPixel, но он выглядит значительно медленнее, чем функция colorTransform.

Это было полезно?

Решение

Попробуйте создать круг с помощью API рисования (flash.display.Graphics), а затем нарисовать его на растровых данных с помощью BlendMode.ERASE.Это может решить вашу проблему, если я правильно понимаю.

var circle : Shape = new Shape;
circle.graphics.beginFill(0xffcc00, 1);
circle.graphics.drawEllipse(-50, -50, 100, 100);

// Create a transformation matrix for the draw() operation, with
// a translation matching the mouse position.
var mtx : Matrix = new Matrix();
mtx.translate(mouseX, mouseY);

// Draw circle at mouse position with the ERASE blend mode, to
// set affected pixels to alpha=0.
myBitmap.draw(circle, mtx, null, BlendMode.ERASE);

Я не уверен на 100%, что режим наложения ERASE удовлетворительно работает с командой draw(), но не понимаю, почему этого не должно быть.Пожалуйста, дайте мне знать, как это работает!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top