剪切路径问题

时间:2011-04-18 17:22:32

标签: android clipping image-clipping

我编写了自己的多线类,它基本上保留了一个可以使用Matrix修改的点列表。多边形线可以添加到其他多边形线并在公共端点处连接。当终点等于起点时,折线将表示多边形。

然后我有一个方法通过使用一系列lineTo()调用迭代点列表来将我的多边形转换为Path对象。然后,此路径将作为视图的onDraw方法中的剪辑路径应用于画布。

它适用于复杂的多边形,我可以绘制该路径以验证它的准确性。

到目前为止一直很好,除了当我有一个中间有不规则孔的复合多边形时,我注意到了问题。我应该在此时停止称它为多边形,因为它是另一个多边形内的多边形。

例如,请考虑下图,其中外部框和中间的“城堡”形状都是用作剪辑路径的相同Path对象的一部分。 #代表绘画区域。

+---------+
|#########|
|#+-+#+-+#|
|#| |#| |#|
|#| +-+ |#|
|#|     |#|
|#+-----+#|
|#########|
+---------+

我希望外盒子之外和内部“城堡”形状内的所有东西都要剪掉。我看到的问题是内部形状没有被正确修剪。似乎是光线跟踪算法的一个问题。

任何想法都会有所帮助。

编辑:此外,我尝试测试每个Region.Op模式,但没有一个解决了这个问题。我怀疑我需要采取措施来检测是否存在“漏洞”并做一些有创意的事情。

1 个答案:

答案 0 :(得分:2)

花了几天玩这个后,我已经解决了我的问题。

我需要将Path.FillType设置为:

path.setFillType(Path.FillType.EVEN_ODD)

然后我有一个实例,相反的情况发生了,只画了中心路径。多一点调查,我能够通过添加:

来解决这个问题
canvas.clipPath(path, Region.Op.DIFFERENCE);

但是外面有一条路径的多边形会使其剪辑倒置。虽然我很满意我发现了正确的书呆子旋钮以获得正确的剪辑行为,但我还没有找到确定需要哪种裁剪方法的方法。

如果有人有任何想法可以分享,我会很高兴。我怀疑它与行添加到路径的顺序有关,例如内部是否被定义为外部等等。