你能混合不同颜色的视图来创造新的颜色吗?

时间:2016-02-06 18:55:51

标签: objective-c uiview calayer uicolor cgcolor

我希望在蓝色视图顶部有一个黄色视图会创建一个较小的绿色视图。 :d

enter image description here

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];
但是,没有工作......有什么想法吗?

我也想将它用于圈子。

1 个答案:

答案 0 :(得分:3)

因为计算机颜色混合是添加剂,将蓝色和黄色混合在一起将永远不会变绿。

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

当与其他颜色混合时,这些RGB值根据相应颜色的alpha值进行插值(它们是多么不透明)。 α值越大意味着对该给定颜色的权重越大。

蓝色的RBG值为(0, 0, 1) blue

黄色的RBG值为(1, 1, 0) yellow

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

(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)

light yellow

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

(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)

light blue

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

(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)

sludge

的E w

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

您可以将青色(0, 1, 1)和黄色(1, 1, 0)0.5的字母组合在一起来实现此目的。

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

light green

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

enter image description here

然而,只要将两种颜色混合在一起,你就永远永远能够以(0, 1, 0)的颜色结束(除非那些颜色是(0, 1, 0)开始)。

If you look at the computer color gamut

enter image description here

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

此线表示通过将这两种颜色以不同的alpha加在一起,可以实现的不同颜色。

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

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