我正在尝试编写函数,它可以根据给定值生成两种颜色之间的颜色。一个例子会更好地解释它..
输入..
X : 1
Y : 0.5
Z : 0
用户给出任意一组 color:value
对,然后输入一个数字(比如 0.75)。然后我必须生成按比例混合 Y 和 Z 的颜色(基于它们的值和输入值)。我在考虑以下方法。
- 找到值周围的颜色,对于 0.75,它将是 0.5 和 1。
- 根据值以某种方式混合这两种颜色并生成新颜色。
我完全迷失了,如何生成颜色,是否有相关的库。
更新: 这是我正在进行的一个更大项目的一部分。可以说我们有..
1 : X
0 : Y
和用户输入,0.25
我想要一些东西..
(X*0.25 + Y*0.75)
因为越接近Y,所以比例越高。如果用户输入 0.5.. 输出应该是
(X*0.5 + Y*0.5)
等等。我不知道如何用 RGB 颜色做到这一点。
P.S:这些问题并不特定于语言,但我是用 Java 做的。
最佳答案
您必须像这样分别混合每个颜色 channel (红色、绿色和蓝色):
Color x,y; //set by you
float blending;//set by you
float inverse_blending = 1 - blending;
float red = x.getRed() * blending + y.getRed() * inverse_blending;
float green = x.getGreen() * blending + y.getGreen() * inverse_blending;
float blue = x.getBlue() * blending + y.getBlue() * inverse_blending;
//note that if i pass float values they have to be in the range of 0.0-1.0
//and not in 0-255 like the ones i get returned by the getters.
Color blended = new Color (red / 255, green / 255, blue / 255);
颜色示例到此为止。一般来说,如果您想要在两个值之间进行线性插值,您必须执行以下操作:
var firstValue;
var secondValue;
var interpolation;
var interpolated = firstValue * interpolation +
secondValue * (1 - interpolation);
但是由于您的情况下有 Color-Objects
,因此您不能一步插入整个对象,您必须自己插入每个相关值。最终你还必须插入 alpha-channel
,不知道,因为你没有提到它,但为了完整起见,我将它包含在这个答案中。
关于java - 生成两种颜色之间的n种颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17544157/