假设我有一个随机的RGB值,如240 23 123.好吗? 所以我想要转换HSV中的RGB值,并且我需要RGB颜色正好处于渐变的中间。所有其他的渐变值都应该有更多的饱和度或更少。 理想情况下,渐变应该始终趋向于白色,而与初始RGB值无关。 有没有一个公式或算法来实现这一目标? 结果应该是1个梯度的HSV值数组。获取给定颜色的渐变,其中颜色位于渐变的中间
0
A
回答
1
如果您希望渐变以白色开始,转到您的颜色,然后转到黑色,可以采用多种方法。这里有一种方法:
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);
}
+0
i/10.0代表什么?什么是10.0。如果我想增加每个渐变的颜色数量? –
+0
10是条目数量的一半。 I/10是你在梯度的前半部分(或后半部分)有多远。我已经更新了代码,以便更清楚。 – user1118321
相关问题
- 1. Javascript颜色渐变
- 2. 颜色渐变(ColdFusion)
- 3. 带颜色渐变的Borderpane
- 4. 颜色渐变的背景
- 5. 带颜色渐变的UIBeziepath
- 6. Three.js行的颜色渐变
- 7. textcolor的颜色渐变
- 8. 用颜色制作颜色渐变:
- 9. 逐渐改变位图的颜色?
- 10. 在wpf中绑定渐变颜色
- 11. 颜色1和颜色2的n种颜色的渐变
- 12. UIlabel文本颜色取决于渐变颜色指示器
- 13. 从两种颜色(从渐变)计算中间颜色
- 14. 计算两种颜色之间的渐变上给定点的颜色?
- 15. 逐渐改变颜色
- 16. CSS创建颜色渐变
- 17. 渐变颜色拉斐尔
- 18. FabricJS渐变颜色值
- 19. CSS:渐变文字颜色?
- 20. 生成颜色渐变
- 21. JFreeChart系列渐变颜色
- 22. 渐变颜色背景?
- 23. DarkGDK颜色渐变代码
- 24. JFreechart LookUpPaintScale颜色渐变
- 25. 生成颜色渐变
- 26. Android渐变颜色aarrggbb
- 27. jQuery的颜色拾取和CSS3渐变
- 28. LWUIT中标签的渐变颜色
- 29. openCV中的线性颜色渐变
- 30. AchartEngine中折线图的渐变颜色
大多数语言有一个可用的色彩空间映射算法已经,有时在他们的STDLIB。我建议使用那些/那些。 –
色彩空间映射。不知道你在说什么。这对我来说是一个新词,色彩空间映射。我正在使用2D游戏引擎。我的问题基本上是随机的RGB值有一个不同的S,它可能在0到100之间变化,而90的S不完全在范围的中间,所以我可以得到不超过20个值的结果数组,倾向于白色但有时变为灰色。 –
理想情况下,也应该涉及V,但如何用S插入它我不知道。 –