Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 随机HSV颜色_Java_Random_Colors_Rgb_Hsv - Fatal编程技术网

Java 随机HSV颜色

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];

我试图得到一个随机的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];

    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);但不幸的是,它对我不起作用:(。