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

macos – 使用反向路径的CGContextClip(),第1张

概述我想在我的CGContext上剪切绘图,但我需要它反过来,即我想使用CGContextAddRect()向我的剪切路径添加几个矩形,剪切应该以我拥有的所有矩形的方式完成添加到剪切路径不受任何绘图 *** 作的影响.通常,它只是反过来,即绘图函数绘制到已添加到剪切路径的矩形,并使未添加到剪切路径的区域不受影响.所以我想我需要的只是一种在调用CGContextClip()之前反转剪切路径的方法.回到Quick 我想在我的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,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,1.0);    CGContextFillRect(ctx,NSRectTocgRect(self.bounds));}

如果您在最后绘制图像而不是填充红色矩形,则效果会更明显.

总结

以上是内存溢出为你收集整理的macos – 使用反向路径的CGContextClip()全部内容,希望文章能够帮你解决macos – 使用反向路径的CGContextClip()所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1017359.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存