雕刻线画好后怎么让边缘变成纯色
How can I make the edge of a carving line have the solid color after I draw it
众所周知,我们在绘制雕刻线后,会出现一些半透明颜色的像素点,如下图
我不知道怎么称呼这种现象,可能是"Blend mode"或"premultiply alpha"引起的,我想知道如何忽略这些none实心像素,谢谢。
我的抽奖代码:
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。有道理,但是有性能问题,那么画线的时候有办法解决吗?谢谢。
这就是所谓的"anti-aliasing"。在绘制之前使用 CGContext.setShouldAntialias(_:)
将其关闭,如下所示:
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.setShouldAntialias(false) // <------
ctx.strokePath()
众所周知,我们在绘制雕刻线后,会出现一些半透明颜色的像素点,如下图
我不知道怎么称呼这种现象,可能是"Blend mode"或"premultiply alpha"引起的,我想知道如何忽略这些none实心像素,谢谢。 我的抽奖代码:
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。有道理,但是有性能问题,那么画线的时候有办法解决吗?谢谢。
这就是所谓的"anti-aliasing"。在绘制之前使用 CGContext.setShouldAntialias(_:)
将其关闭,如下所示:
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.setShouldAntialias(false) // <------
ctx.strokePath()