2011-11-10 59 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(...