所以这基本上就是我想写的方法(在Objective-C/Cocoa中,使用UIColors
,但我真的只对底层数学感兴趣):
+ (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
在您的第一个方法原型中).