Flex 3,ActionScript 3,Flash player 9。
我有一个BitmapData对象中的图片和一个点数组。我需要擦除由这些点指定的多边形内部的图片部分。换句话说,绘制由这些点指定的多边形并用透明度填充它。
你有任何想法如何实现吗?
Flex 3,ActionScript 3,Flash player 9。
我有一个BitmapData对象中的图片和一个点数组。我需要擦除由这些点指定的多边形内部的图片部分。换句话说,绘制由这些点指定的多边形并用透明度填充它。
你有任何想法如何实现吗?
使用以下代码,我解决了问题:
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");
对于矩形,您可以使用fillRect。对于多边形,您需要使用完全不同颜色(与位图中的其他颜色不同)绘制多边形,并使用floodFill - 但我不知道如何绘制多边形。位图数据类中没有绘制线条的方法。另一个选项是编写自己的逻辑以查找多边形内的像素,并使用setPixel32方法将它们的alpha设置为零。
这个wikipedia page描述了查找点是否在给定多边形内的算法。您可能会发现它有用。