要求每次取得的颜色对比要尽量地大,并且能无限次重复调用。
我现在用的是下面的方法,不过效果不很好,对比度不高,而且重复周期太短,数组中只有26种颜色,而且是静态的。
希望有一种动态生成算法。public class ColorGenerator{
private static int no = 0;
private static Color[] colors = {
new Color(0, 0, 0),
new Color(0, 0, 127),
new Color(0, 0, 255),
new Color(0, 127, 0),
new Color(0, 127, 127),
new Color(0, 127, 255),
new Color(0, 255, 0),
new Color(0, 255, 127),
new Color(0, 255, 255), new Color(127, 0, 0),
new Color(127, 0, 127),
new Color(127, 0, 255),
new Color(127, 127, 0),
new Color(127, 127, 127),
new Color(127, 127, 255),
new Color(127, 255, 0),
new Color(127, 255, 127),
new Color(127, 255, 255), new Color(255, 0, 0),
new Color(255, 0, 127),
new Color(255, 0, 255),
new Color(255, 127, 0),
new Color(255, 127, 127),
new Color(255, 127, 255),
new Color(255, 255, 0),
new Color(255, 255, 127)
}; public static Color getColor(){
if(no == colors.length){
no = 0;
}
return colors[no ++];
}
}
我现在用的是下面的方法,不过效果不很好,对比度不高,而且重复周期太短,数组中只有26种颜色,而且是静态的。
希望有一种动态生成算法。public class ColorGenerator{
private static int no = 0;
private static Color[] colors = {
new Color(0, 0, 0),
new Color(0, 0, 127),
new Color(0, 0, 255),
new Color(0, 127, 0),
new Color(0, 127, 127),
new Color(0, 127, 255),
new Color(0, 255, 0),
new Color(0, 255, 127),
new Color(0, 255, 255), new Color(127, 0, 0),
new Color(127, 0, 127),
new Color(127, 0, 255),
new Color(127, 127, 0),
new Color(127, 127, 127),
new Color(127, 127, 255),
new Color(127, 255, 0),
new Color(127, 255, 127),
new Color(127, 255, 255), new Color(255, 0, 0),
new Color(255, 0, 127),
new Color(255, 0, 255),
new Color(255, 127, 0),
new Color(255, 127, 127),
new Color(255, 127, 255),
new Color(255, 255, 0),
new Color(255, 255, 127)
}; public static Color getColor(){
if(no == colors.length){
no = 0;
}
return colors[no ++];
}
}
解决方案 »
- 求教一个JAVA算法!!
- 这个<a href=***>用法有问题,请求你帮助。
- 古老的问题(数据库连接问题)。至今为解决,请高手们指点指点吧。
- 初探Java,觉得开发的环境太麻烦。100分咨询
- 我的提问怎么没有显示出来?CSDN是不是有问题啊?
- Socket 编程的初级问题
- 谁有Jcreator的注册码?
- 调查:大家都在用Java开发什么?
- 往jbuilder里加文件的问题?怎么找不到类?
- 我已经把visual cafe(4.0)和visual age for java(4,0)都装上了,可是还是不会生成exe,难道非得用批处理?
- 谁碰到过java.io.InvalidClassException异常?怎么解决?
- 如何使用句柄关闭窗体?
你可以用随机数来生成颜色啊,将随机数传入color的构造函数!
如果可以在对比色的周围取的话就可以解决.
当然不是绝对的对比色,我的意思只是要让两种颜色对人眼来说是容易区别的。
有了参考的颜色,取与这个颜色对比度大的应该不难了吧。
比如用颜色new Color(0,0,0)做参数,生成一个Color(127~255,127~255,127~255)的颜色。
这样应该可以吧。对颜色没有什么研究,希望可以做个参考
import java.util.Random;public class ColorGenerator{ private Random random=new Random();
private int adjustNumber=40; //对比度调整数值
private Color lastColor=new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256));
private Color newColor; public Color getColor(){
int red=(255-lastColor.getRed()+random.nextInt(adjustNumber))%255;
int green=(255-lastColor.getGreen()+random.nextInt(adjustNumber))%255;
int blue=(255-lastColor.getBlue()+random.nextInt(adjustNumber))%255; newColor=new Color(red,green,blue);
lastColor=newColor;
return newColor;
} public static void main(String[] args)
{
ColorGenerator cg=new ColorGenerator();
for(int i=0;i<10;i++)
{
System.out.println(cg.getColor());
}
}
}
s=b=100的时候
h的相邻两个值只要间隔在40(h的取值0-359)以上,对比度应该可以