gpt4 book ai didi

objective-c - iOS Quartz/CoreGraphics 绘制羽化描边

转载 作者:可可西里 更新时间:2023-11-01 03:34:01 26 4
gpt4 key购买 nike

我正在按照从用户收集的一组点绘制一条路径到 CGContext。似乎有一些随机输入抖动导致一些线边缘看起来参差不齐。我认为轻微的羽毛可以解决这个问题。如果我使用的是 OpenGL ES,我会简单地将羽毛应用到我正在抚摸路径的 Sprite 上;然而,这个项目要求我留在 Quartz/CoreGraphics 中,我似乎找不到类似的解决方案。

我试着画了 5 条线,每条线都稍微大一点,更透明,以近似于一根羽毛。这会产生不好的结果并显着降低性能。

这是画线代码:

CGContextMoveToPoint(UIGraphicsGetCurrentContext(),((int)lastPostionDrawing1.x), (((int)lastPostionDrawing1.y)));
CGContextAddCurveToPoint(UIGraphicsGetCurrentContext(), ctrl1_x, ctrl1_y, ctrl2_x, ctrl2_y, lastPostionDrawing2.x, lastPostionDrawing2.y;
[currentPath addCurveToPoint:CGPointMake(lastPostionDrawing2.x-((int)furthestLeft.x)+((int)penSize), lastPostionDrawing2.y controlPoint1:CGPointMake(ctrl1_x, ctrl1_y) controlPoint2:CGPointMake(ctrl2_x, ctrl2_y)];

最佳答案

我继续假设你的 CGContext 仍然打开了抗锯齿功能,但如果没有,那么这显然是第一个尝试的想法,正如@Davyd 的评论所建议的:CGContextSetShouldAntialias是感兴趣的函数。

假设这不是问题所在,并且线条已根据上下文消除锯齿,但您仍然想要“更柔和”的东西。我可以想到几种方法来做到这一点,希望比抚摸 5 次更快。

首先,您可以尝试使用 CGContextReplacePathWithStrokedPath 获取描边路径(即描述当前路径描边轮廓的路径),然后您可以用渐变(或其他任何其他方式)填充此路径填充技术给出了预期的结果。)这对于直线很有效,但对于曲线路径就不是那么简单了(因为渐变正在填充描边路径的区域,并且将是线性的或径向的。)

另一个可能不太明显的选择可能是为此目的滥用 CG 的阴影绘图。您要查找的函数是:CGContextSetShadowWithColor 方法如下:

  • 保存 GState:CGContextSaveGState
  • 获取原路径的bounding box
  • 复制路径,使用 CGPathCreateCopyByTransformingPath 将其从自身偏移 2.0 * bbox.width(注意:仅使用 X 方向,这样您就不必担心上下文中的翻转)
  • 使用 CGContextClipToRect 将上下文剪切到原始 bbox
  • 使用 CGContextSetShadowWithColor 在上下文中设置阴影:
    • 一些最小的模糊(从 0.5 开始并从那里开始。模糊参数是非线性的,IME 是一种猜测和检查操作)
    • 偏移量等于 -2.0 * bbox 宽度和 0.0 高度,缩放到基础空间。 (注意:这些偏移量在基础空间中。这会令人抓狂,但假设您不添加自己的比例变换,比例因子将是 1.0 或 2.0,所以实际上,您将设置一个-2.0*bbox.width 或 -4.0*bbox.width 的 offset.width)
    • 您选择的颜色。
  • 画出平移的路径。
  • 弹出 GState CGContextRestoreGState

这应该让您“只”看到阴影,希望您可以对其进行调整以获得您想要的结果。

总而言之,CG 的阴影绘制性能,IME,不完全出色,也不完全确定。我希望它比用 5 次不同的笔划在路径上划 5 次更快,但不是绝对如此。

这将归结为达到这种效果对您来说值多少钱。

关于objective-c - iOS Quartz/CoreGraphics 绘制羽化描边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7233257/

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