计算两种颜色之间渐变上给定点的颜色?

时间:2014-03-06 07:43:08

标签: ios colors gradient uicolor

所以这基本上就是我想写的方法(在Objective-C / Cocoa中,使用UIColors,但我真的只对底层数学感兴趣):

+ (UIColor *)colorBetweenColor:(UIColor *)startColor andColor:(UIColor *)endColor atLocation:(CGFloat)location;

举个例子,我说有两种颜色,纯红色和纯蓝色。给定两者之间的线性渐变,我想计算在该渐变上的33%标记处的颜色: Example
所以,如果我这样称呼我的方法:

UIColor *resultingColor = [UIColor colorBetweenColor:[UIColor redColor] andColor:[UIColor blueColor] atLocation:0.33f];

我会在“B”处得到结果颜色,同样地,传递0.0f因为位置会返回颜色“A”,而1.0f会返回颜色“C”。

基本上我的问题是,如何混合两种颜色的RGB值并确定它们之间某个“位置”的颜色?

3 个答案:

答案 0 :(得分:48)

您只需线性插入红色,绿色和蓝色通道,如下所示:

double resultRed = color1.red + percent * (color2.red - color1.red);
double resultGreen = color1.green + percent * (color2.green - color1.green);
double resultBlue = color1.blue + percent * (color2.blue - color1.blue);

其中percent是介于0和1之间的值(第一个方法原型中为location)。

答案 1 :(得分:1)

RGB色彩空间就像一个圆圈。沿着外边界具有最高饱和度,并且在中间具有灰色。从一种颜色到另一种颜色旅行,你最好想要从中间沿着相同的半径(圆圈)做到这一点;以至于饱和度和值保持不变。在这种情况下,色调以线性方式变化。您不会进入比最初左右颜色更多的灰色区域。 你可以从内圈到外圈,简单地向上(或向下)饱和;再次线性地。 有关色圈,请参阅here(在例如paint.net中试用)

Apple的(iOS)目标类允许您使用除RGB之外的其他光谱。

答案 2 :(得分:0)

Swift版本可能会对某人有所帮助。

{{1}}