Java 随机HSV颜色
我试图得到一个随机的HSV颜色,然后将其转换为RGB使用。有人知道我该怎么做吗?谢谢,山姆。到目前为止,我得到的是:第一种方法将HSV转换为具有指定值的RGB,第二种方法用于获得随机颜色Java 随机HSV颜色,java,random,colors,rgb,hsv,Java,Random,Colors,Rgb,Hsv,我试图得到一个随机的HSV颜色,然后将其转换为RGB使用。有人知道我该怎么做吗?谢谢,山姆。到目前为止,我得到的是:第一种方法将HSV转换为具有指定值的RGB,第二种方法用于获得随机颜色 public static float[] HSVtoRGB(float h, float s, float v) { float m, n, f; int i; float[] hsv = new float[3]; float[] rgb = new float[3];
public static float[] HSVtoRGB(float h, float s, float v) {
float m, n, f;
int i;
float[] hsv = new float[3];
float[] rgb = new float[3];
hsv[0] = h;
hsv[1] = s;
hsv[2] = v;
if (hsv[0] == -1) {
rgb[0] = rgb[1] = rgb[2] = hsv[2];
return rgb;
}
i = (int) (Math.floor(hsv[0]));
f = hsv[0] - i;
if (i % 2 == 0) {
f = 1 - f; // if i is even
}
m = hsv[2] * (1 - hsv[1]);
n = hsv[2] * (1 - hsv[1] * f);
switch (i) {
case 6:
case 0:
rgb[0] = hsv[2];
rgb[1] = n;
rgb[2] = m;
break;
case 1:
rgb[0] = n;
rgb[1] = hsv[2];
rgb[2] = m;
break;
case 2:
rgb[0] = m;
rgb[1] = hsv[2];
rgb[2] = n;
break;
case 3:
rgb[0] = m;
rgb[1] = n;
rgb[2] = hsv[2];
break;
case 4:
rgb[0] = n;
rgb[1] = m;
rgb[2] = hsv[2];
break;
case 5:
rgb[0] = hsv[2];
rgb[1] = m;
rgb[2] = n;
break;
}
return rgb;
}
public static int randomColor() {
int hue = (int) (Math.random() * 6.0f);
int saturation = (int) (Math.random());
int brightness = (int) (Math.random());
float[] rgb = HSVtoRGB(hue, saturation, brightness);
int red = (int) (rgb[0] * 255.0f);
int green = (int) (rgb[1] * 255.0f);
int blue = (int) (rgb[2] * 255.0f);
return (red << 16) | (green << 8) | blue;
}
public static float[]HSVtoRGB(浮点h、浮点s、浮点v){
浮点数m,n,f;
int i;
浮动[]hsv=新浮动[3];
浮动[]rgb=新浮动[3];
hsv[0]=h;
hsv[1]=s;
hsv[2]=v;
如果(hsv[0]=-1){
rgb[0]=rgb[1]=rgb[2]=hsv[2];
返回rgb;
}
i=(int)(数学层(hsv[0]);
f=hsv[0]-i;
如果(i%2==0){
f=1-f;//如果我是偶数
}
m=hsv[2]*(1-hsv[1]);
n=hsv[2]*(1-hsv[1]*f);
开关(一){
案例6:
案例0:
rgb[0]=hsv[2];
rgb[1]=n;
rgb[2]=m;
打破
案例1:
rgb[0]=n;
rgb[1]=hsv[2];
rgb[2]=m;
打破
案例2:
rgb[0]=m;
rgb[1]=hsv[2];
rgb[2]=n;
打破
案例3:
rgb[0]=m;
rgb[1]=n;
rgb[2]=hsv[2];
打破
案例4:
rgb[0]=n;
rgb[1]=m;
rgb[2]=hsv[2];
打破
案例5:
rgb[0]=hsv[2];
rgb[1]=m;
rgb[2]=n;
打破
}
返回rgb;
}
公共静态int-randomColor(){
int色调=(int)(Math.random()*6.0f);
int饱和=(int)(Math.random());
int亮度=(int)(Math.random());
float[]rgb=HSVtoRGB(色调、饱和度、亮度);
红色整数=(整数)(rgb[0]*255.0f);
绿色整数=(整数)(rgb[1]*255.0f);
蓝色整数=(整数)(rgb[2]*255.0f);
return(red您可以使用java.awt.Color.RGBtoHSB(…)
您可以在这里找到它的相关文档:
然后生成一个随机颜色就变得微不足道了
int red = (int) (Math.random() * 256)
int green = (int) (Math.random() * 256)
int blue = (int) (Math.random() * 256)
然后直接转换。注意,在同一个类中还有一个HSBtoRGB(…)
函数。不,我想生成一个随机的HSV值。我不想得到“random”RGB值,然后转换为HSB,然后再转换回来。大概你可以很容易地生成一个随机RGB值,如我上面的代码片段所示,然后将这些RGB值转换为你的HSB值。我不知道HSV是什么,谷歌确认你可能指的是HSB。请看这里:是的,HSV和HSB是一样的,我需要获取HS的随机值B.你的答案是正确的,但我需要随机HSB值,谢谢。如果你需要直接生成随机HSB值,那么你需要知道的是色调、饱和度和亮度的上限和下限。因为它们是浮点值,我假设所有3个值都从0到1?如果是这样,那么你可以用h=Math分别生成每个值。random(),s=Math.random(),b=Math.random(),因为这会生成一个介于0和1之间的随机双精度,您可以显式地将其转换为浮点或任何您需要的值。非常感谢,色调的边界是6,这就是为什么我得到int hue=(int)(Math.random()*6.0f);但不幸的是,它对我不起作用:(。