Pregunta

¿Hay una manera de aplicar un colorTransform a un BitmapData en un círculo en lugar de en un rectángulo?

En lugar de borrar partes rectangulares de una imagen mediante la reducción del canal alfa como en el código siguiente, me gustaría hacerlo en círculos.

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

I tienen algún código que los bucles a través de los píxeles, extrae el valor alfa y utiliza setPixel pero las costuras significativamente más lento que la función colorTransform.

¿Fue útil?

Solución

Trate de crear un círculo utilizando la API de dibujo (flash.display.Graphics) y luego dibujo que en los datos de mapa de bits con BlendMode.ERASE. Eso podría resolver su problema, si he entendido bien.

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);

No estoy 100% seguro de que el modo de mezcla ERASE funciona satisfactoriamente con el comando draw (), pero no puedo ver por qué no debería hacerlo. Por favor, hágamelo saber cómo funciona!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top