2011-08-22 40 views
0

我有以下情況:問題合併兩個BitmapData對象alpha通道

一個繪圖層(圖形用了lineTo對象等)

一個PNG帶有alpha通道(應該僅作爲掩碼)

現在我想只能在受png掩碼限制的區域內畫線。

我試圖像這樣:

var bitmapData:BitmapData = new BitmapData(320, 320); 
bitmapData.draw(drawingLayer); 
bitmapData.copyChannel(maskBitmapData, new Rectangle(0, 0, 320, 320), new Point(0, 0), BitmapDataChannel.ALPHA, BitmapDataChannel.ALPHA); 

現在的邊界得到切除細,但我得到一個黑色的背景,因爲繪圖層繪製的線條之間的alpha(它應該仍然會是這樣)並且掩碼位圖在形狀外部具有一個alpha。所以自然,蒙版的alpha將替換繪圖層。

我試了它與合併,copyPixels和也只是設置圖層上的掩膜屬性(我把所有設置爲cacheAsBitmap),但無濟於事。

有人可以幫我嗎?

此外:

嘗試使用面具時,我與

<s:BitmapImage id="mask" source="@Embed(source='...')" cacheAsBitmap="true" /> 

試了一下,也可以作爲

[Embed("...")] 
private const BodyMask:Class; 
var maskBitmap:Bitmap = new BodyMask(); 

,並將它們分配給作爲mask屬性:組元素(cacheAsBitmap = true)發生在圖形對象上的操作。我也嘗試在每次抽獎操作後重新分配面具。

是否有可能出現問題?

回答

1

我剛剛過類似的問題,並設法工作了這一點類似這樣的

maskedBitmap.fillRect(maskedBitmap.rect, 0); 
bitmapData.draw(drawingLayer); 
maskedBitmap.copyChannel(maskBitmap, maskBitmap.rect, new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.ALPHA); 
maskedBitmap.copyPixels(bitmapData, bitmapData.rect, new Point(),maskedBitmap, new Point()); 

我複製藍色通道到Alpha通道,因爲我maskBitmap是灰度。因爲你的面具使用的是阿爾法,所以你應該將阿爾法複製到阿爾法:

maskedBitmap.copyChannel(maskBitmap, maskBitmap.rect, new Point(), BitmapDataChannel.ALPHA, BitmapDataChannel.ALPHA); 
0

自從我用ActionScript做了任何事情之後已經有一段時間了,但我想知道爲什麼你要合併兩個alpha通道。你能不能設置PNG作爲你(或用戶)正在繪製的精靈的面具?

drawingLayer.mask = maskBitmap; 
+0

是的,這就是我一開始就在做的事情。但面具從來沒有真正有效果。我真的無法弄清楚這一點,並認爲它可能與我的面具是一個PNG(雖然,爲什麼它不工作?)嘗試了cacheAsBitmap設置,然後搜索並發現一些人聲稱只是複製alpha通道。它是,雖然只是你掩蓋了一個堅實的物體,而不是透明背景上的一些塗鴉。 – DasAntonym