2011-11-10 43 views
0

损失我使用LoaderMax加载外部PNG和许多地方一样显示出来,所以我用下面的代码复制的图像:AS3:复制一个PNG图像引起的透明度

var cd:ContentDisplay = ContentDisplay(loader.getContent("name")); 
var b1 = Bitmap(cd.rawContent); 
var old = b1.bitmapData; 
var bmp = new Bitmap(b1); 

container.addChild(bmp); 

原始图像具有在alpha通道上为50%,但是当我从同一个bitmapData对象创建新的位图时,它不保留Alpha通道。

如果我尝试复制alpha通道(请参阅下面的代码;如果我理解正确,alpha通道从本身复制到本身) - 透明度在新图像上,但代码会引发错误。 ..

bmp.copyChannel(old, new Rectangle(0, 0, old.width, old.height), new Point(), BitmapDataChannel.ALPHA, BitmapDataChannel.ALPHA); 

错误:

ReferenceError: Error #1069: Property copyChannel not found on flash.display.Bitmap and there is no default value. 
    at barmask/frame1() 

我怎样才能复制PNG和维护Alpha透明度...最好不出错?

P.s.请原谅任何明显的失误,我是一个福利局的ActionScript ...

回答

0

创建BitmapData实例,传递3个参数的构造函数:new BitmapData(w, h, true)Boolean值是透明度
还检查源BitmapData

+0

这没有似乎工作。我用你推荐的构造函数创建了一个新的BitmapData,并且还必须将旧的图像复制到新的图像。这仍然没有保留alpha通道。 –

+0

以及源'BitmapData'的'transparent'属性呢? – www0z0k

+0

这是一篇关于使用BitmapData对象http://www.developria.com/2010/02/dealing-with-bitmapdata.html的文章。以下是一些成功使用draw()将alpha BitmapData复制到新位图中的代码http://flexdiary.blogspot.com/2009/12/riadventure-inspiration.html –

2
transparent财产

他的回答是非常接近完成:

new BitmapData(w, h, true, 0); 

最后一个属性,确保闪光灯不包括在新的图像背景。这应该可以解决你的问题。它必须完全是“0”,而不是0x000000。

0

位图不具有copyChannel方法错误说:)

取而代之的是:

bmp.copyChannel(... 

你需要这样做:

bmp.bitmapData.copyChannel(...