import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Shape;
import flash.display.BlendMode;
var dst1:BitmapData = new BitmapData(100,100, true, 0xFF000000);
var dst2:BitmapData = dst1.clone();
var src:BitmapData = new BitmapData(100,100, true, 0);
var shape:Shape = new Shape();
shape.graphics.beginFill(0xcc);
shape.graphics.drawCircle(50,50,50);
shape.graphics.endFill();
src.draw( shape );
dst1.draw( shape, null, null, BlendMode.ERASE );
dst2.draw( src, null, null, BlendMode.ERASE );
var bmp1:Bitmap = new Bitmap(dst1);
var bmp2:Bitmap = new Bitmap(dst2);
bmp2.x = 100;
addChild(bmp1);
addChild(bmp2);
其中一个draw的是displayobjet,一个draw的是bitmapdata,Blendmode.ERASE和APHLA,就不起作用了。 看了帮助,上面说了一段让我莫名的话 "Erases the background based on the alpha value of the display object. This process requires that the
blendMode property of the parent display object be set to
flash.display.BlendMode.LAYER. " 什么需要父对象的blendmode设置为LAYER,我就郁闷了,不就是用alpha通道来计算像素值嘛,又不是真要你去填背景的像素值。 但为什么用displayobject就可以了,用bitmapdata就不行...... 无法理解之前,暂时当它是bug......现在只好每次用Bitmap去包装一下,再draw,真是极大的浪费啊 orz