gpt4 book ai didi

macos - 使用反向路径的 CGContextClip()

转载 作者:行者123 更新时间:2023-12-03 16:08:39 25 4
gpt4 key购买 nike

我想在我的CGContext上剪裁绘图,但我需要它只是相反,即我想使用CGContextAddRect()向我的剪裁路径添加几个矩形 并且剪切应该以这样的方式完成:我添加到剪切路径的所有矩形都不受任何绘图操作的影响。通常情况下,情况正好相反,即绘图函数绘制已添加到剪切路径的矩形,而未添加到剪切路径的区域不受影响。所以我想我需要的只是在调用 CGContextClip() 之前反转剪切路径的方法。回到 QuickDraw 时代,这可以通过使用区域然后为每个矩形调用 XorRgn() 轻松完成。但对于 Quartz 来说,情况似乎更复杂。有谁有一个简单的解决方案来实现这一点,还是我需要自己进行所有这些路径反转计算?

最佳答案

您可以将整个边界添加为矩形,然后添加要从绘图中排除的矩形并使用 CGContextEOClip

示例:

- (void)drawRect:(NSRect)dirtyRect
CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort];
//Fill the background with gray:
CGContextSetRGBFillColor(ctx, 0.5, 0.5, 0.5, 1);
CGContextFillRect(ctx, NSRectToCGRect(self.bounds));
CGContextAddRect(ctx, NSRectToCGRect(self.bounds));
//Add some rectangles:
CGContextAddRect(ctx, CGRectMake(10, 10, 100, 100));
CGContextAddRect(ctx, CGRectMake(120, 120, 50, 100));
//Clip:
CGContextEOClip(ctx);
//Fill the entire bounds with red:
CGContextSetRGBFillColor(ctx, 1.0, 0.0, 0.0, 1.0);
CGContextFillRect(ctx, NSRectToCGRect(self.bounds));
}

如果在末尾绘制图像而不是填充红色矩形,效果会更加明显。

关于macos - 使用反向路径的 CGContextClip(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com