2009-10-11 46 views
5

Flex 3,ActionScript 3,Flash player 9.如何擦除BitmapData对象中的区域?

我在BitmapData对象中有一张图片。还有一些点数。我需要删除由点指定的多边形内的部分图片。换句话说,绘制点指定的多边形并填充透明度。

关于如何完成的任何想法?

回答

9

得到它用下面的代码工作:

 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"); 
+0

+1这是一个很好的。考虑接受你自己的答案,以便这个问题在列表中出现。 – Amarghosh 2009-10-12 08:33:39

+0

Ooohhh ...很好。我不知道你可以这样做:-p – 2009-10-12 11:23:31

+0

“在GPU渲染下不支持”。 - http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BlendMode.html所以你可能会发现(和我一样),这种方法对类似的情况不起作用。 – PeteB 2016-08-19 02:57:48

1

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

这个wikipedia page描述了算法来找出一个点是否在一个给定的多边形内。你可能会觉得它很有用。

+0

是否还有其他选择吗?像掩蔽多边形一样。我想这是可能的,只是不知道如何 – artemb 2009-10-11 10:49:42