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

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

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

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

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

我将在'B'得到最终的颜色,同样,传递0.0f作为位置将返回颜色'A', 1.0f将返回颜色'C'。

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

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

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

RGB颜色空间就像一个圆圈。 沿边界饱和度最高,中间灰色。 从一种颜色到另一种颜色,你最好想要做到这一点,从中间沿着相同的半径(圆)。 以达到饱和度和价值保持不变的地方。 在这种情况下,色调以线性方式变化。 你不会穿过比你最初的左和右颜色更多的灰色区域。 你可以从内环到外环,简单地向上(或向下)饱和; 再次线性。 看到这里的色环(尝试在例如paint.net)

苹果(iOS)客观类允许您使用除RGB以外的其他光谱。