algorithm - 获取给定颜色的渐变,其中颜色位于渐变的中间

标签 algorithm math graphics colors hsv

假设我有一个随机的 RGB 值,例如 240 23 123。好吗? 所以我想在 HSV 中转换 RGB 值,我需要 RGB 颜色正好在渐变的中间。所以渐变的所有其他值应该有更多或更少的饱和度。 理想情况下,无论初始 RGB 值是多少,渐变都应始终趋向于白色。 是否有公式或算法来实现这一目标? 结果应该是 1 个梯度的 HSV 值数组。

最佳答案

如果您希望渐变从白色开始,转到您的颜色,然后转到黑色,您可以通过多种方式实现。这是一种方法:

const int numEntries = 20;
const int halfNumEntries = numEntries / 2;
RGBColor gradient[numEntries];
HSVColor hsv = RGBToHSV (rgb); // Where rgb is the RGB color you start with

// Gradient from white to your color
for (int i = 0; i < halfNumEntries; i++)
{
    float newHue = hsv.hue;
    float newSat = (i / halfNumEntries) * hsv.sat;
    float newVal = 1.0 + (i / halfNumEntries) * (hsv.val - 1.0);
    gradient [ i ] = HSVToRGB (newHue, newSat, newVal);
}

gradient [ halfNumEntries ] = rgb;

// Gradient from your color to black
for (int i = (halfNumEntries + 1); i < numEntries; i++)
{
    float newHue = hsv.hue;
    float newSat = hsv.sat + ((i - halfNumEntries) / (halfNumEntries - 1)) * (0.0 - hsv.sat);
    float newVal = hsv.val + ((i - halfNumEntries) / (halfNumEntries - 1)) * (0.0 - hsv.val);
    gradient [ i ] = HSVToRGB (newHue, newSat, newVal);
}

关于algorithm - 获取给定颜色的渐变,其中颜色位于渐变的中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18499897/

相关文章:

arrays - 在 F# 中使用相同的键映射多个元素

xml - 我可以使用明文差异算法来跟踪 XML 更改吗?

javascript - 如何使数据点拟合一条与主曲线随机变化的曲线?

math - 为什么十进制数不能用二进制精确表示?

Java Swing : Changing color of a ball on mouseEntered

algorithm - "hill climbing"和 "greedy"算法有什么区别?

algorithm - 插值搜索比二分搜索慢的例子是什么?

c++ - 在 C++ 中以优化方式计算 0<=x<=1 和 1<y<2 的 pow(x,y)

graphics - 连接贝塞尔曲线

graphics - 常见的 lisp 类型与 defgeneric 运行时分析