CGContextClip 抗锯齿问题
Posted
技术标签:
【中文标题】CGContextClip 抗锯齿问题【英文标题】:CGContextClip Antialiasing issue 【发布时间】:2014-09-20 15:50:06 【问题描述】:我在 UIView drawRect 函数中绘制一个形状,该函数涉及剪切路径,然后在后面添加彩色块,以便颜色具有剪切路径的形状。但是,由于某种原因,路径的线条并不顺畅;如果抗锯齿不能正常工作。
CGContextSetStrokeColorWithColor(context, [UIColor clearColor].CGColor);
CGContextSetLineWidth(context, 1.0);
CGContextSetShouldAntialias(context, true);
CGContextSetAllowsAntialiasing(context, true);
CGContextBeginPath (context);
CGContextMoveToPoint(context, xStart, yStart);
for (int i=0; i<points.count; i++)
CGContextAddLineToPoint(context, xPoint, yPoint);
CGContextAddLineToPoint(context, xStart, yStart );
CGContextClip(context);
CGRect colorRect = CGRectMake(0, 0 , rectWidth, rectHeight);
CGContextSetFillColorWithColor(context, blockColor.CGColor);
CGContextFillRect(context, colorRect);
CGContextRestoreGState(context);
结果应该有平滑的线条,但它会出现锯齿状的可见像素,如下图所示:
知道问题出在哪里以及如何解决吗?
提前致谢
【问题讨论】:
你在画直方图,不是吗? 是的,它是一个直方图 【参考方案1】:好的。所以,你的代码没有问题。问题是抗锯齿的工作方式有点不同。您绘制一个垂直斜率,期望结果直方图的边缘将被平滑。但实际上抗锯齿并不能平滑生成的图形。它与路径元素(曲线,线条)一一对应。因此,例如,如果你画一个圆,它的边缘会被平滑。
您的问题有一个简单的解决方案:只需创建一条曲线,包围直方图。将其添加到您的上下文中。看起来会更流畅。
抱歉英语不好。
【讨论】:
我将对此进行探索,但您对图表的组成方式有误......那些不是条形或垂直斜率,它们应该是线条,但呈现像像素边界上的条形跨度> 好吧,不管怎样,它们是不同的行。数组中有多少个点?以上是关于CGContextClip 抗锯齿问题的主要内容,如果未能解决你的问题,请参考以下文章