在两种颜色之间生成n种颜色

que*_*ons 4 java algorithm rgb colors

我正在尝试编写函数,它可以根据给定的值在两种颜色之间生成颜色.一个例子可以更好地解释它..

输入..

X : 1
Y : 0.5
Z : 0
Run Code Online (Sandbox Code Playgroud)

用户给出任意一color:value对,然后输入一个数字(比如0.75).然后我必须生成颜色,它是Y和Z的比例混合(基于它们的值和输入值).我在考虑以下方法.

  • 找到围绕该值的颜色,对于0.75,它将是0.5和1.
  • 根据值以某种方式混合这两种颜色并生成新颜色.

我完全迷失了,因为如何生成颜色,是否有任何库.

更新:这是我正在开展的更大项目的一部分.让我们说..

1 : X
0 : Y
Run Code Online (Sandbox Code Playgroud)

和用户输入,0.25

我想有点东西..

(X*0.25 + Y*0.75)
Run Code Online (Sandbox Code Playgroud)

因为它更靠近Y,这就是为什么更高的比例.如果用户输入,0.5 ..输出应该是

(X*0.5 + Y*0.5)
Run Code Online (Sandbox Code Playgroud)

等等.我不知道如何用RGB颜色做到这一点.

PS:问题不是特定于语言,而是我在Java中这样做.

luk*_*302 5

你必须分别混合每个颜色通道(红色,绿色和蓝色):

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);
Run Code Online (Sandbox Code Playgroud)

到目前为止的颜色示例.通常,如果要在两个值之间进行线性插值,则必须执行以下操作:

var firstValue;
var secondValue;
var interpolation;

var interpolated =  firstValue * interpolation + 
                   secondValue * (1 - interpolation);
Run Code Online (Sandbox Code Playgroud)

但是,由于你Color-Objects的情况是,你不能一步插入整个对象,你必须自己插入每个相关的值.最后你也必须插入alpha-channel,不知道,因为你没有提到它,但为了完整性,我把它包含在这个答案中.