我有以下情况:
一个绘图层(带有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属性,其中发生了对图形对象的操作。我也尝试在每次绘制操作后重新分配蒙版。
这可能有问题吗?
答案 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;