【问题标题】:CGContextClip Antialiasing issueCGContextClip 抗锯齿问题
【发布时间】: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);

结果应该有平滑的线条,但它会出现锯齿状的可见像素,如下图所示:

知道问题出在哪里以及如何解决吗?

提前致谢

【问题讨论】:

  • 你在画直方图,不是吗?
  • 是的,它是一个直方图

标签: ios uiview core-graphics


【解决方案1】:

好的。所以,你的代码没有问题。问题是抗锯齿的工作方式有点不同。您绘制一个垂直斜率,期望结果直方图的边缘将被平滑。但实际上抗锯齿并不能平滑生成的图形。它与路径元素(曲线,线条)一一对应。因此,例如,如果你画一个圆,它的边缘会被平滑。

您的问题有一个简单的解决方案:只需创建一条曲线,包围直方图。将其添加到您的上下文中。看起来会更流畅。

抱歉英语不好。

【讨论】:

  • 我将对此进行探索,但您对图表的组成方式有误......那些不是条形或垂直斜率,它们应该是线条,但呈现像像素边界上的条形跨度>
  • 好吧,不管怎样,它们是不同的行。数组中有多少个点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
  • 2010-12-01
  • 2015-06-21
  • 2011-07-17
相关资源
最近更新 更多