gpt4 book ai didi

objective-c - NSBezierPath绘图

转载 作者:太空狗 更新时间:2023-10-30 03:22:32 32 4
gpt4 key购买 nike

我想在 NSImage 上做一个圆角矩形轮廓,我认为使用 NSBezierPath 是最好的方法。但是,我遇到了一个问题:我没有画出漂亮的曲线,而是得到了这个:

enter image description here

出于我无法理解的原因,NSBezierPath 正在用比其余部分更深的颜色绘制圆形部分。

这是我正在使用的代码(在 drawRect 中:调用自定义 View ):

NSBezierPath* bp = [NSBezierPath bezierPathWithRoundedRect: self.bounds xRadius: 5 yRadius: 5];
[[[NSColor blackColor] colorWithAlphaComponent: 0.5] setStroke];
[bp stroke];

有什么想法吗?

编辑:

如果我将路径插入 0.5,一切都很好。但是为什么当我将路径偏移 10 个像素(例如)时会得到这个?

enter image description here

如果我没理解错的话,它也应该画一条细线...

最佳答案

许多渲染系统都源自 PostScript 绘图模型。 Core Graphics 就是这些衍生系统之一。 (以下是其他一些:PDF、SVGthe HTML Canvas 2D ContextCairo。)

所有这些系统都有用固定宽度的线描边路径的想法。当您抚摸路径时,线条跨越路径:线条宽度的一半在路径的一侧,线条宽度的一半在另一侧。下面的图表可能会更清楚地说明这一点:

stroked path, unclipped

现在,当您划出一条位于 View 边界的路径时会发生什么?一半的笔画落在 View 的边界之外并被剪掉 - 而不是绘制。您只能看到落在 View 边界内的一半笔画。

当您使用圆角时,该角会从 View 边界拉向其中心,因此角周围的更多描边会落在 View 边界内。因此笔画在圆角周围看起来变粗了,像这样:

stroked path, clipped

要解决此问题,您需要将路径插入线宽的一半,以便整个笔画沿着整个路径落在 View 的边界内。默认线宽为 1.0,因此:

NSBezierPath* bp = [NSBezierPath bezierPathWithRoundedRect:
NSRectInset(self.bounds, 0.5, 0.5) xRadius:5 yRadius:5];

关于objective-c - NSBezierPath绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13674118/

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