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

标签 ios macos quartz-2d cgcontext

给定:

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

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

CGContextClipToRect(ctx, r);

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

enter image description here

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

enter image description here

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

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

给定 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 - 获取 iOS 的活跃用户数

iOS Swift 在 View 关闭时停止 MoviePlayer

javascript - 防止在带有 Canvas 的页面上的移动设备上滚动

ios - 核心显卡裁剪

macos - quartz 2D锯齿线

objective-c - Cocoa iOS 通过碰撞将矩形变成圆形

ios - 如何让 UILabel 更好地调整大小?

objective-c - 为什么 Nib 加载会选取我的类别?

python - 使用 py2app 时,有没有办法自定义显示的回溯对话框? (或者显示不同的 Cocoa 对话框?)

Objective-C:获取文件类型支持的文件扩展名