在两个特定值之间生成颜色
Generate Color between two specific values
我有最低速度的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)
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 线程之间的布尔停止信号
- 如何获得 QColor::greenF 颜色值正好在 0 到 1 之间而不是四舍五入?
- 如何在 2d 颜色选取器中创建返回 2 种颜色之间的颜色的函数
- 检测不同颜色之间的边界
- c++在不同颜色之间褪色?(Arduino)
- 在两个特定值之间生成颜色
- OpenCV中2个RGB图像之间的颜色一致