如何在BitmapData对象中擦除区域?

5

Flex 3,ActionScript 3,Flash player 9。

我有一个BitmapData对象中的图片和一个点数组。我需要擦除由这些点指定的多边形内部的图片部分。换句话说,绘制由这些点指定的多边形并用透明度填充它。

你有任何想法如何实现吗?

2个回答

10

使用以下代码,我解决了问题:

        var shape:Shape = new Shape();
        shape.graphics.beginFill(0x000000, 1); // solid black
        shape.graphics.moveTo(points[0].x, points[0].y);

        points.forEach(function (p:Point, i:int, a:Array):void {
                shape.graphics.lineTo(p.x, p.y);
            });
        shape.graphics.endFill();
        data.draw(shape, null, null, "erase");

+1 这个很不错。考虑接受您自己的答案,这样这个问题就会显示为已解决。 - Amarghosh
哦哦哦...不错啊。我不知道你能这么做 :-p - Christopher Lightfoot
"不支持GPU渲染。" - http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/display/BlendMode.html 所以你可能会发现(就像我一样)这种方法在类似情况下不起作用。 - PeteB

1

对于矩形,您可以使用fillRect。对于多边形,您需要使用完全不同颜色(与位图中的其他颜色不同)绘制多边形,并使用floodFill - 但我不知道如何绘制多边形。位图数据类中没有绘制线条的方法。另一个选项是编写自己的逻辑以查找多边形内的像素,并使用setPixel32方法将它们的alpha设置为零。

这个wikipedia page描述了查找点是否在给定多边形内的算法。您可能会发现它有用。


还有其他选项吗?比如遮罩多边形。我想这是可能的,只是不知道怎么做。 - artemb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接