我需要在位图上绘制但不在它的透明像素上绘制?
示例图片:http://i.stack.imgur.com/QvJTZ.png
我写了这段代码:
import flash.display.Bitmap;
import flash.events.Event;
import flash.geom.Matrix;
var s:S = new S();
var m_bitmapData = new BitmapData(s.width, s.height, true, 0x00000000);
m_bitmapData.draw(s);
var hole=new Sprite();
var hole_matrix:Matrix
hole.graphics.beginFill(0x000000);
hole.graphics.drawCircle(0,0,30);
var bmp:Bitmap = new Bitmap(m_bitmapData);
bmp.x = 50
bmp.y =50
stage.addChild(bmp);
addEventListener(Event.ENTER_FRAME,asd);
function asd(e:Event):void{
hole_matrix=new Matrix();
hole_matrix.translate(mouseX-bmp.x,mouseY-bmp.y);
m_bitmapData.draw(hole,hole_matrix);
}
但结果如图片“NO”。
有人可以解释一下吗?
答案 0 :(得分:0)
保留Alpha通道,然后将其复制回来。
var tempBD:BitmapData=new BitmapData(m_bitmapData.width,m_bitmapData.height,true,0);
...
function asd(e:Event):void {
...
tempBD.copyChannel(m_bitmapData,m_bitmapData.rect,new Point(),BitmapDataChannel.ALPHA,BitmapDataChannel.ALPHA);
m_bitmapData.draw(hole,hole_matrix);
m_bitmapData.copyChannel(tempBD,tempBD.rect,new Point(),BitmapDataChannel.ALPHA,BitmapDataChannel.ALPHA);
}
基本上你做的是:你在其他地方有一个与你的画布BitmapData相同的BitmapData,然后你将alpha通道复制到那个BitmapData,绘制你想要的,然后复制alpha通道。无论透明,保持透明。请注意,如果您不想更改Alpha通道,则可以copyChannel()
将其删除一次,然后只需恢复。