所以这就是我想写的方法(用Objective-C/可可,使用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值,并确定它们之间某个“位置”的颜色?
3条答案
按热度按时间ru9i0ody1#
您只需线性插值红色、绿色和蓝色通道,如下所示:
其中
percent
是0到1之间的值(第一个方法原型中的location
)。jaql4c8m2#
RGB颜色空间就像一个圆。最高饱和度沿着外边界,灰色在中间。从一种颜色到另一种颜色,你最好是这样做,沿着相同的半径(圆)从中间;以便饱和度和值保持不变。在这种情况下,色调是以线性方式变化的。你不会进入比你的左和右颜色最初更多的灰色区域。你可以从内环旅行到外环,简单地上升(或下降)饱和度;再次线性。请参阅here的颜色圆圈(尝试它在例如paint.net)
Apple(iOS)的物镜类允许您使用RGB以外的其他光谱。
eivnm1vs3#
我知道从技术上讲这不是一个javascript问题,但我也在纠结于同一个概念,所以我想我应该做一个演示来可视化公认的答案
运行下面的代码并移动滑块
希望这在某种程度上有所帮助:)