【发布时间】:2014-05-23 07:17:01
【问题描述】:
很难描述我想要做什么。我基本上想创建一个离散的彩虹渐变,这样对于 i 数量的 JButton 的任何一行,它们之间的颜色渐变都会看起来像彩虹。
我已经完成了以下操作,但它实际上只创建了一个红色渐变,然后是绿色渐变,然后是蓝色渐变:
Color[] c = new Color[i];
for(int n = 0; n < i; n++) {
if(n < i/3) {
c[n] = new Color(255, 255/(n+1), 255/(n+1));
} else if(n < 2*i/3) {
c[n] = new Color(255/(n-(i/3)), 255, 255/(n-(i/3)));
} else {
c[n] = new Color(255/(n+1), 255/(n+1), 255);
}
}
知道如何获得某种类型的彩虹效果吗?
谢谢
编辑:
使用了一个似乎工作得更好的正弦函数,但不确定如何定义它,所以我在我想要的区域得到一个“彩虹波”:
for(int n = 0; n < i; n++) {
c[n] = new Color((int)(Math.sin(n) * 127 + 128), (int)(Math.sin(n + Math.PI/2) * 127 + 128), (int)(Math.sin(n + Math.PI) * 127 + 128));
}
【问题讨论】:
-
我已经这样做了,但我没有算法。这并不容易,据我所知,这是一个相当复杂的算法。在我想出一个有用的算法之前,我在油漆的颜色编辑器中坐了一会儿,研究 RGB 在 2D 比例上是如何工作的。可以在这里看到我所做的一个示例(我的颜色数组在底部)tinypic.com/view.php?pic=whl0eu&s=8#.U0Wz4_ldW3Q
-
@zgc7009 看起来很复杂!
-
仍然需要一些调整,但是是的,它非常复杂。当我回到我的桌面时,我会看看我是否找不到算法让你至少给你一个开始的地方。
-
也可以考虑
Color.getHSBColor,见here。
标签: java swing colors gradient rgb