Kreiscolortransform
-
22-09-2019 - |
Frage
Gibt es eine Möglichkeit, eine colortransform zu einem BitmapData- in einem Kreis anzulegen, anstatt in einem Rechteck?
Statt rechteckigen Teile eines Bildes des Löschens durch den Alphakanal, wie in dem folgenden Code reduzieren, ich möchte es im Kreis tun.
_bitmap.colorTransform(new Rectangle(mouseX-d/2, mouseY-d/2, d, d),
new ColorTransform(1, 1, 1, .5, 0, 0, 0, 1));
ich einen Code haben, der durch die Pixel-Schleifen, extrahiert den Alpha-Wert und verwendet setPixel aber es Nähte deutlich langsamer als die Funktion colortransform.
Lösung
Versuche einen Kreis mit der Zeichnung API (flash.display.Graphics) zu schaffen und dann die Daten mit BlendMode.ERASE auf die Bitmap-Zeichnung. Das könnte Ihr Problem lösen, wenn ich es richtig verstanden hat.
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);
Ich bin nicht 100% sicher, dass der ERASE-Mischmodus satisfyingly mit dem draw () Befehl funktioniert, aber ich kann nicht sehen, warum soll es nicht. Bitte lassen Sie mich wissen, wie es funktioniert!