草庐IT

ios - quartz 2D : How to convert a clipping rect to an inverted mask at runtime?

coder 2023-09-21 原文

给定:

  1. 带有框架 {0,0,100,100} 的 CGContextRef (ctx)
  2. 和一个矩形 (r),框架为 {25,25,50,50}

将上下文剪切到该矩形很容易:

CGContextClipToRect(ctx, r);

遮盖下面的红色区域(红色== mask ):

但我想反转这个剪裁矩形以将其转换为剪裁 mask 。期望的结果是屏蔽下面的红色部分(red == mask):

我想在运行时以编程方式执行此操作。

不想手动准备位图图像以随我的应用静态发布。

给定 ctxr,如何在运行时最轻松/直接地完成此操作?

最佳答案

阅读 “Filling a Path” section of the Quartz 2D Programming Guide 中的填充规则.

对于您的情况,最简单的做法是使用奇偶填充规则。创建一个由您的小矩形和一个更大的矩形组成的路径:

CGContextBeginPath(ctx);
CGContextAddRect(ctx, CGRectMake(25,25,50,50));
CGContextAddRect(ctx, CGRectInfinite);

然后,使用奇偶填充规则将此路径与剪切路径相交:

CGContextEOClip(ctx);

关于ios - quartz 2D : How to convert a clipping rect to an inverted mask at runtime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14145641/

有关ios - quartz 2D : How to convert a clipping rect to an inverted mask at runtime?的更多相关文章

随机推荐