随机HSV颜色

时间:2013-07-10 17:43:14

标签: 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[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;
}

1 个答案:

答案 0 :(得分:2)

您可以使用java.awt.Color.RGBtoHSB(...)您可以在此处找到相关文档:http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/Color.html

然后生成随机颜色变得微不足道。

int red = (int) (Math.random() * 256)
int green = (int) (Math.random() * 256)
int blue = (int) (Math.random() * 256)

然后直接转换。请注意,同一个类中还有一个HSBtoRGB(...)函数。