gpt4 book ai didi

ios - 你如何重新描边到另一种颜色的路径并得到完全相同的结果?

转载 作者:行者123 更新时间:2023-11-28 19:53:36 25 4
gpt4 key购买 nike

我正在开发一个涉及画线的应用程序。每次用户移动手指时,该点都会添加到路径中,并且还会添加到 CGContext 中,如下例所示。

CGContextMoveToPoint(cacheContext, point1.x, point1.y);
CGContextAddCurveToPoint(cacheContext, ctrl1_x, ctrl1_y, ctrl2_x, ctrl2_y, point2.x, point2.y);
CGPathMoveToPoint(path, NULL, point1.x, point1.y);
CGPathAddCurveToPoint(path, NULL, ctrl1_x, ctrl1_y, ctrl2_x, ctrl2_y, point2.x, point2.y);

现在,当我想添加它并用黑色描边时,我使用以下代码

CGContextSetStrokeColorWithColor([UIColor blackcolor].CGColor)
CGContextAddPath(cacheContext,path);
CGContextStrokePath(cacheContext);

然而,这次描边的线条会比之前绘制的线条小一点。这将导致描边路径周围出现轻微的边界。所以我的问题是:如何让描边路径与绘制到 CGcontext 中的路径相同?

最佳答案

问题是由于抗锯齿引起的。路径是一个几何理想。通过给定宽度、颜色等描边路径生成的位图是不完美的。理想的形状完全覆盖一些像素,但只部分覆盖其他像素。

没有抗锯齿(并假设颜色不透明)的结果是完全绘制大部分位于理想形状内的像素,并且不接触大部分位于理想形状之外的像素。这会在垂直或水平线以外的任何地方留下可见的锯齿。如果您稍后再次使用相同的笔划参数绘制相同的路径,则会影响完全相同的像素,并且由于它们是完全绘制的,您可以用新的完全替换旧的绘图。

使用抗锯齿后,任何仅部分位于理想形状内的像素都不会完全涂上新颜色。相反,笔划颜色与理想形状内的像素百分比成比例地应用。该像素中已有的颜色以反比例保留。例如,理想形状内 43% 的像素将获得一种颜色,该颜色是笔划颜色的 43% 加上先前颜色的 57%。

这意味着用不同的颜色第二次描边路径不会完全替换上一次描边的颜色。如果用白色填充位图,然后用红色描边路径,边缘的一些像素会混合一点红色和一点白色,形成浅红色或粉红色。如果您随后用蓝色描边该路径,则沿边缘的像素将混合一点蓝色和一点那里的颜色,即浅红色或粉红色。这将产生洋红色。

您可以使用 CGContextSetShouldAntialias() 禁用抗锯齿功能,但您可能会出现锯齿。您必须围绕路径的两个行程执行此操作。

或者,您可以在重绘路径之前将上下文清除为某种背景颜色。但为此,您需要能够完全重绘您想要出现的所有内容。

关于ios - 你如何重新描边到另一种颜色的路径并得到完全相同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27808133/

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