在两个特定值之间生成颜色

时间:2016-01-08 09:38:43

标签: c++ colors

我的最低速度Color和最高速度Color

我有另一个名为currentSpeed的变量,它给出了当前的速度。我想使用当前速度在两个极端之间生成Color。任何提示?

1 个答案:

答案 0 :(得分:2)

最简单的解决方案可能是对每个RGB进行线性插值(因为这可能是您的颜色所在的格式)。然而,它可能会导致一些奇怪的结果。如果lowest为亮蓝色(0x0000FF)且highest为亮黄色(0xFFFF00),则中间将为深灰色(0x808080)。

更好的解决方案可能是:

  • 将两种颜色转换为HSL(色调,饱和度,亮度)
  • 线性插入这些组件
  • 将结果转换回RGB。

有关如何与HSL进行转换,请参阅this answer

要进行线性插值,您需要以下内容:

double low_speed = 20.0, high_speed = 40.0;  // The end points.
int low_sat = 50, high_sat = 200;            // The value at the end points.
double current_speed = 35;

const auto scale_factor = (high_sat-low_sat)/(high_speed-low_speed);
int result_sat = low_sat + scale_factor * (current_speed - low_speed);

两个问题:

  • 如果速度实际上不是double,则需要注意整数舍入。
  • 当您进行插值色调时,您需要知道它们在圆上表示为角度 - 因此您可以选择是顺时针插补还是逆时针插补(其中一个将通过360返回0)
相关问题