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

bla*_*bus 35 gradient colors uicolor ios

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

+ (UIColor *)colorBetweenColor:(UIColor *)startColor andColor:(UIColor *)endColor atLocation:(CGFloat)location;
Run Code Online (Sandbox Code Playgroud)

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

UIColor *resultingColor = [UIColor colorBetweenColor:[UIColor redColor] andColor:[UIColor blueColor] atLocation:0.33f];
Run Code Online (Sandbox Code Playgroud)

我会得到'B'的结果颜色,同样地,0.0f当位置返回颜色'A'时,1.0f将返回颜色'C'.

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

use*_*321 53

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

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);
Run Code Online (Sandbox Code Playgroud)

其中percent的值介于0和1之间(location在您的第一个方法原型中).

  • 仅当您使用RGB空间时,这才有效。 (2认同)
  • @LudovicLandry-啊,我明白你的意思了。是的,您必须将命名的颜色转换为其他颜色空间(RGB,HSV,CMYK等)。但是一旦它们处于可以进行数学运算的色彩空间中,线性插值就可以正常工作。 (2认同)