众所周知,绘制一条雕刻线后,有些像素具有半透明的颜色,如下所示。
我不知道怎么称呼这种现象,可能是由“混合模式”或“预乘alpha”引起的,我想知道如何忽略这些非固态像素,谢谢。我的绘画代码:
guard let ctx = UIGraphicsGetCurrentContext() else { return }
ctx.addPath(path)
ctx.setLineCap(.round)
ctx.setLineWidth(lineWidth)
ctx.setStrokeColor(lineColor.cgColor)
ctx.setBlendMode(.normal)
ctx.setAlpha(lineAlpha)
ctx.strokePath()
我有一个解决方案,即从ctx生成图像,然后将半透明像素更改为实心像素,然后将图像绘制回ctx。这是有道理的,但是它存在性能问题,那么在画线时我们有办法解决它吗?谢谢。
这就是所谓的“抗锯齿”。在进行绘制之前,请使用CGContext.setShouldAntialias(_:)
将其关闭,如下所示:
CGContext.setShouldAntialias(_:)