java - 生成两种颜色之间的n种颜色

标签 java algorithm colors rgb

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

输入..

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/

相关文章:

java - ANTLR4 运行时 JAR

java - 出于语法原因,是否值得使用长度为 2 的数组而不是两个变量?

c - 遍历数组,什么更好,更快等等?

algorithm - 无限棋盘井字游戏的最佳数据结构

javascript - 从十六进制值中检测相似的颜色

java - 你们的 JBoss 5 开发环境是什么?

JAVA 根据分隔符在字符串中添加单引号

HTML 网格数字列边框颜色

algorithm - SURF 算法的输出到底是什么?我如何使用它们进行分类(SVM 等)?

algorithm - 图像压缩算法 - 按颜色将图像分成正方形