【发布时间】:2019-11-12 15:30:43
【问题描述】:
我想使用 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()
是否可以在单个频道中绘制?还是我必须绘制单独的位图并在像素级别组合它们?
【问题讨论】:
-
画到个别频道是徒劳的。即使你能做到,它也只能用于绘制红色、绿色和蓝色的椭圆。任何其他颜色都需要瞬态才能正常工作,所以你应该直接这样做。
UIColor.greeen.setFill()正在设置不透明的绿色,这就是您看到这种覆盖行为的原因。 -
所示示例过于简单化。我需要能够为不同的通道绘制不同的形状,并在特定的通道中绘制位图。据我所知,透明度没有帮助。
-
(假设我正确理解了这个问题)没关系。您只有 3 个颜色通道来模拟 3 个固定颜色(r、g、b)。使用这些,您只能混合纯红色或纯绿色或纯蓝色的图像。例如,您不能使用这种技术在一些半透明的紫色对象后面绘制一个半透明的对象。
标签: ios swift core-graphics channel