合并两个bitmapdata对象的alpha通道的问题

时间:2011-08-22 20:23:23

标签: actionscript-3 actionscript graphics bitmapdata

我有以下情况:

一个绘图层(带有lineTo的图形对象等)

一个带有alpha通道的png(应该只用作遮罩)

现在我希望只能在由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自然会取代绘图层。

我尝试使用merge,copyPixels以及仅在绘图层设置mask属性(我将所有内容设置为cacheAsBitmap),但无济于事。

有人可以帮我吗?

此外:

尝试使用面具时,我尝试使用

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

以及

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

并将它们分配给s:Group元素(cacheAsBitmap = true)的mask属性,其中发生了对图形对象的操作。我也尝试在每次绘制操作后重新分配蒙版。

这可能有问题吗?

2 个答案:

答案 0 :(得分: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是灰度级的。因为你在掩码中使用alpha,所以你应该将alpha复制到alpha:

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

答案 1 :(得分:0)

自从我使用Actionscript做了一些事情已经有一段时间了,但我想知道你为什么试图合并两个alpha通道。你能不能将png设置为你(或用户)绘制的精灵的面具?

,如

drawingLayer.mask = maskBitmap;