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

Generate Color between two specific values

本文关键字:之间 颜色 两个      更新时间:2023-10-16

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

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

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

更好的解决方案可能是:

  • 将两种颜色转换为HSL(色调、饱和度、亮度)
  • 对这些组件进行线性插值
  • 将结果转换回RGB

有关如何转换到HSL和从HSL转换的信息,请参阅此答案。

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

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)