【问题标题】:Can you mix views of different colours to create new colours?你能混合不同颜色的视图来创造新的颜色吗?
【发布时间】:2016-05-16 16:00:23
【问题描述】:

我希望在蓝色视图之上有一个黄色视图会创建一个更小的绿色视图。 :D

UIView *blueView = [UIView new];
blueView.frame = CGRectMake(0.0, 0.0, 100.0, 100.0);
blueView.alpha = 0.5;
blueView.backgroundColor = [UIColor blueColor];
[self.view addSubview:blueView];

UIView *yellowView = [UIView new];
yellowView.frame = CGRectMake(40.0, 40.0, 100.0, 100.0);
yellowView.alpha = 0.5;
yellowView.backgroundColor = [UIColor yellowColor];
[self.view addSubview: yellowView];

虽然没有用...对此有什么想法吗?

我也想用它来做圈子。

【问题讨论】:

  • 你改变了不透明度?
  • 用相关代码更新您的问题。
  • 有一个similar question 可以帮助你

标签: objective-c uiview calayer uicolor cgcolor


【解决方案1】:

因为计算机颜色混合是相加的,所以将蓝色和黄色混合在一起永远不会变成绿色。

颜色用 RGB 值表示(通常来自 0-255,因为每个组件只占用一个字节,但为了简单起见,我将在此处从 0-1 表示它们)。

当与其他颜色混合时,这些 RGB 值会根据各自颜色的 alpha 值(它们的不透明程度)进行插值。更大的 alpha 值意味着对给定颜色的权重更大。

Blue 的 RBG 值为 (0, 0, 1)

Yellow的RBG值为(1, 1, 0)

因此,当第一次与白色背景混合时,黄色会结束:

(1, 1, 0) * 0.5 + (1, 1, 1) * 0.5 = (0.5, 0.5, 0) + (0.5, 0.5, 0.5) = (1, 1, 0.5)

现在当蓝色与白色背景混合时,您会得到:

(0, 0, 1) * 0.5 + (1, 1, 1) * 0.5 = (0, 0, 0.5) + (0.5, 0.5, 0.5) = (0.5, 0.5, 1)

最后,将它们混合在一起时得到的颜色取决于您首先绘制的颜色。如果你先画蓝色(就像你已经完成的那样),你会得到混合的蓝色和未混合的黄色:

(0.5, 0.5, 1) * 0.5 + (1, 1, 0) * 0.5 = (0.25, 0.25, 0.5) + (0.5, 0.5, 0) = (0.75, 0.75, 0.5)

呃。


我认为接近绿色的最佳方法是尝试瞄准浅色绿色

您可以通过将青色(0, 1, 1) 和黄色(1, 1, 0)0.5 的alpha 混合在一起来实现这一点。

如果你在黄色之前添加青色,那么你最终会得到(0.75, 1, 0.5)

如果你在青色之前混合黄色,​​(0.5, 1, 0.75)

但是,您将永远仅仅通过将两种颜色混合在一起就可以得到(0, 1, 0)的颜色(除非这些颜色以(0, 1, 0)开头)。


If you look at the computer color gamut:

想象一下在上面挑选你的两种颜色,然后在它们之间画一条直线。

这条线表示您可以通过以不同的 alpha 将这两种颜色相加混合来获得的不同颜色。

这表明除了绿色和绿色之外,这条线上没有两种颜色可以是绿色。红色和蓝色也是如此,因为它们是色域的极端


但是,您也许可以通过使用与普通添加剂不同的混合模式来实现所需的结果。您可以使用 CGContextSetBlendMode() 在 Core Graphics 中轻松完成此操作。 Have a look at the Core Graphics blend-mode docs.

【讨论】:

  • 这对您有帮助吗@user3737190?如果有,请考虑接受:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 2017-05-09
  • 2016-05-30
  • 2020-01-01
  • 2017-10-20
相关资源
最近更新 更多