如果我举两个颜色如何获得颜色中旬2个UIColors之间的iOS
UIColor *color1 = [UIColor blackColor];
UIColor *color2 = [UIColor whiteColor];
我应该得到grayColor作为结果,我应该怎样实现的呢?
如果我举两个颜色如何获得颜色中旬2个UIColors之间的iOS
UIColor *color1 = [UIColor blackColor];
UIColor *color2 = [UIColor whiteColor];
我应该得到grayColor作为结果,我应该怎样实现的呢?
发现的一种直接的方式“在...之间”是进行平均的四个组成部分,这样的:
UIColor *color1 = [UIColor blackColor];
UIColor *color2 = [UIColor whiteColor];
CGFloat r1, r2, g1, g2, b1, b2, a1, a2;
[color1 getRed:&r1 green:&g1 blue:&b1 alpha:&a1];
[color2 getRed:&r2 green:&g2 blue:&b2 alpha:&a2];
UIColor *avg = [UIColor colorWithRed:(r1+r2)/2.0f
green:(g1+g2)/2.0f
blue:(b1+b2)/2.0f
alpha:(a1+a2)/2.0f];
注意,这将产生一个中点RGBA颜色空间,这只是许多可能的颜色空间中的一个。平均其他色彩空间中的组件会导致不同的结果。
['UIColor'类引用](https://developer.apple.com/library/ios/documentation/UIKit/Reference /UIColor_Class/index.html#//apple_ref/occ/instm/UIColor/getRed:green:blue:alpha :)。可能有用 – Arc676
非常感谢你 –
这会始终与预期相符吗?是否有混合两种颜色的可能性,但会变得浑浊而不是预期的颜色? – Fogmeister
抢答斯威夫特4+
func blend(colors: [UIColor]) -> UIColor {
let componentsSum = colors.reduce((red: CGFloat(0), green: CGFloat(0), blue: CGFloat(0))) { (temp, color) in
guard let components = color.cgColor.components else { return temp }
return (temp.0 + components[0], temp.1 + components[1], temp.2 + components[2])
}
let components = (red: componentsSum.red/CGFloat(colors.count) ,
green: componentsSum.green/CGFloat(colors.count),
blue: componentsSum.blue/CGFloat(colors.count))
return UIColor(red: components.red, green: components.green, blue: components.blue, alpha: 1)
}
它融合了许多颜色,只要你愿意
还有一个例子是:如果我给红色和黄色的颜色,我应该得到的橙色。 –
获取红色,蓝色,绿色组件的数值平均值。 –
http://stackoverflow.com/questions/398224/how-to-mix-colors-naturally-with-c方法应该是一样的。只需使用'getRed:green:blue:alpha:'获得红色/蓝色/绿色的值,或者可以使用'getHue:saturation:brightness:alpha:'进行一些工作。 – Larme