可以使用Core Graphics绘制单个通道吗?

时间:2019-07-02 03:01:01

标签: ios swift core-graphics channel

我想使用Core Graphics绘制特定的通道。

使用下面的代码,使用单个通道颜色绘制每个形状,但是第二个绿色填充矩形将覆盖先前的红色椭圆。我希望一个椭圆仅在红色通道中,而正方形仅在绿色通道中。我尝试使用透明层,但它们没有帮助。

UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
let context = UIGraphicsGetCurrentContext()!
let circlePath = UIBezierPath(ovalIn: CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50))
let squarePath = UIBezierPath(rect: CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50))

UIColor.red.setFill()
circlePath.fill()

UIColor.green.setFill()
squarePath.fill()

是否可以吸引各个渠道?还是我必须绘制单个位图并在像素级别将它们组合起来?

1 个答案:

答案 0 :(得分:0)

您需要使用UIBezierPath.fill(),而不是使用fill(with:alpha:)(它将贝塞尔曲线绘制为完全不透明),而您可以使用它来将自定义不透明度指定为{{ 1}}(完全透明)和CGFloat(完全不透明)。

有多种混合模式可用(请参见CGBlendMode),它们指定部分透明的表面如何相互作用。乘法是“明智的默认选择”,但是您可以试用它们,看看哪一种与您的设计最匹配。混合模式与Photoshop中的混合模式相同,因此有很多在线教程,说明和示例,例如https://photoshoptrainingchannel.com/blending-modes-explained/