Quartz2D:如何在运行时将剪切矩形转换为反转掩码?

Tod*_*orf 7 macos cgcontext quartz-2d ios

鉴于:

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

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

CGContextClipToRect(ctx, r);
Run Code Online (Sandbox Code Playgroud)

掩盖下面的红色区域(红色==掩码):

在此输入图像描述

但是我想反转这个剪切矩形以将其转换为剪贴蒙版.期望的结果是掩盖下面的红色部分(红色==掩码):

在此输入图像描述

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

希望手动准备一个位图图像与我的应用程序静态发货.

鉴于ctx并且r,如何在运行时最容易/直接地完成?

rob*_*off 16

请阅读Quartz 2D Programming Guide"填充路径"部分中的填充规则.

在您的情况下,最简单的方法是使用偶数填充规则.创建一个由小矩形和一个更大的矩形组成的路径:

CGContextBeginPath(ctx);
CGContextAddRect(ctx, CGRectMake(25,25,50,50));
CGContextAddRect(ctx, CGRectInfinite);
Run Code Online (Sandbox Code Playgroud)

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

CGContextEOClip(ctx);
Run Code Online (Sandbox Code Playgroud)