Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 合并两个bitmapdata对象时出现问题';阿尔法通道_Actionscript 3_Actionscript_Graphics_Bitmapdata - Fatal编程技术网

Actionscript 3 合并两个bitmapdata对象时出现问题';阿尔法通道

Actionscript 3 合并两个bitmapdata对象时出现问题';阿尔法通道,actionscript-3,actionscript,graphics,bitmapdata,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 )

我有以下情况:

一个图形图层(带有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自然会替换绘图层的alpha

我尝试了merge、copyPixels,还只是在绘图层上设置了mask属性(我将所有内容都设置为cacheAsBitmap),但没有效果

有人能帮我吗

添加:

当我试着用面具的时候,我试着用它

<s:BitmapImage id="mask" source="@Embed(source='...')" cacheAsBitmap="true" />
并将它们分配给对图形对象执行操作的s:Group元素(cacheAsBitmap=true)的mask属性。我还尝试在每次绘制操作后重新分配遮罩


这可能有什么问题吗?

我已经有一段时间没有用Actionscript做任何事情了,但我想知道你为什么要尝试合并两个alpha通道。你能不能将png设置为你(或用户)正在绘制的精灵的遮罩


我刚刚遇到了类似的问题,并且成功地解决了这个问题

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 );

是的,我一开始就是这么做的。但面具从未真正起作用。我真的想不出这一点,并认为这可能与掩码是png有关(尽管,为什么它不能工作?)尝试了cacheAsBitmap设置,然后谷歌发现一些人声称只复制alpha通道更容易。是的,不过只有当你遮盖了一个实体而不是透明背景上的一些涂鸦时。
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() );
maskedBitmap.copyChannel( maskBitmap, maskBitmap.rect, new Point(), BitmapDataChannel.ALPHA, BitmapDataChannel.ALPHA );