android - 剪切路径问题

标签 android clipping image-clipping

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

然后,我有一种方法可以通过调用一系列 lineTo() 来迭代点列表,从而将我的多边形转换为 Path 对象。然后在我的 View 的 onDraw 方法中将该路径作为剪辑路径应用于 Canvas 。

它非常适合复杂的多边形,我可以绘制该路径以验证其准确性。

到目前为止一切顺利,只是当我有一个中间有不规则孔的复合多边形时,我注意到了一些问题。此时我可能应该停止称它为多边形,因为它是另一个多边形内的多边形。

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

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

我希望外框外和内部“城堡”形状内的所有东西都被剪掉。我看到的问题是内部形状没有被正确剪裁。似乎是光线追踪算法的问题。

任何想法都会有所帮助。

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

最佳答案

在玩了几天之后,我的问题已经解决了一半。

我需要将 Path.FillType 设置为:

path.setFillType(Path.FillType.EVEN_ODD)

但后来我遇到了一个相反的情况,只绘制了中心路径。多一点调查,我能够通过添加来解决这个问题:

canvas.clipPath(path, Region.Op.DIFFERENCE);

但是在外部只有一条路径的多边形会反转它们的剪辑。虽然我很满意我找到了正确的 nerd-knobs 来获得正确的剪辑行为,但我还没有找到一种方法来确定需要哪些剪辑方法。

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

关于android - 剪切路径问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5706501/

相关文章:

javascript - Android 在动态添加类时与一般兄弟选择器的奇怪行为

android - 授权 Google Drive Android API

android - 聊天应用中的 Firebase 实时数据库结构

android - 如何测试异步 HTTP 请求和响应 Android

java - 如何解决 OpenGL 中的 z-fighting 问题?

android - Canvas.clipPath(Path) 未按预期剪切

html - Chrome 中的 SVG 路径裁剪问题

c++ - 具有多边形裁剪区域的 Liang Barsky 裁线算法

html - GWT 剪辑图像