Question

Est-il possible d'appliquer un colorTransform à un BitmapData dans un cercle plutôt que dans un rectangle?

Au lieu d'effacer des parties rectangulaires de l'image en réduisant le canal alpha comme dans le code ci-dessous, je voudrais le faire dans les cercles.

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

I ont un code qui fait une boucle à travers les pixels, extraits de la valeur alpha et utilise setPixel mais il coutures nettement plus lente que la fonction de colorTransform.

Était-ce utile?

La solution

Essayez de créer un cercle en utilisant l'API de dessin (de flash.display.Graphics), puis en tirant sur celle des données bitmap avec BlendMode.ERASE. Cela pourrait résoudre votre problème, si je comprends 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);

Je ne suis pas sûr à 100% que le mode de fusion ERASE fonctionne avec la commande satisfyingly tirage au sort (), mais je ne vois pas pourquoi il ne devrait pas. S'il vous plaît laissez-moi savoir comment ça marche!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top