在不裁剪的情况下填充 CGPath 的倒数

Posted

技术标签:

【中文标题】在不裁剪的情况下填充 CGPath 的倒数【英文标题】:Filling the inverse of the CGPath without clipping 【发布时间】:2013-10-14 09:31:29 【问题描述】:

假设我有一个 CGPath,它是 CGContextRef 中的一个圆圈。我想做的是用颜色填充路径的倒数。下面演示了圆圈是当前绘制的路径,我想用颜色填充圆圈的反面,留下一个空洞:

【问题讨论】:

【参考方案1】:

首先将矩形添加到路径中,然后将圆形(或任何您的路径)添加到同一路径中。然后做一个奇偶填充,它不会填充圆形,因为圆形和矩形都覆盖了它。

CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, bigRect);      // add the big rect
CGPathAddPath(path, NULL, circlePath);   // add your shape (the circle)
CGContextDrawPath(path, kCGPathEOFill);  // even-odd fill

【讨论】:

这是一个很好的建议,除了我有重叠的圆圈,甚至奇怪会产生不良结果【参考方案2】:

由于您有重叠的圆圈,您需要创建一个表示这些圆圈联合的路径,然后将该路径添加到您的矩形并按照 David 的建议进行填充。

为了创建圆形路径的联合,这个项目将证明是无价的:

https://bitbucket.org/martinwinter/vectorbooleancg

确保查看“CGPath”分支以获得 ios 支持。

【讨论】:

以上是关于在不裁剪的情况下填充 CGPath 的倒数的主要内容,如果未能解决你的问题,请参考以下文章

使用 iText 在不丢失注释的情况下裁剪 pdf

在不影响纵横比的情况下裁剪图像

如何在不裁剪的情况下调整新图像对象的大小?

在不移动叠加视图的情况下裁剪和缩放图像,而是在 ImageView 中移动图像

C#如何在不使用大量内存的情况下裁剪图像? [复制]

在不使用 div 的情况下在 html 中裁剪图像