Pergunta

Existe uma maneira de aplicar um colortransform a um bitmapdata em um círculo e não em um retângulo?

Em vez de apagar partes retangulares de uma imagem, reduzindo o canal alfa como no código abaixo, eu gostaria de fazê -lo em círculos.

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

Eu tenho algum código que atravessa os pixels, extrai o valor alfa e usa setpixel, mas ele costuma ser significativamente mais lento que a função ColorTransform.

Foi útil?

Solução

Tente criar um círculo usando a API de desenho (flash.display.graphics) e, em seguida, desenhe -o para os dados do bitmap com o blendmode.erase. Isso pode resolver seu problema, se eu entender corretamente.

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

Não tenho 100% de certeza de que o modo de mistura de apagamento funcione satisfatoriamente com o comando draw (), mas não consigo ver por que não deveria. Por favor, deixe -me saber como funciona!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top