首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机HSV颜色

随机HSV颜色
EN

Stack Overflow用户
提问于 2013-07-11 01:43:14
回答 1查看 1.7K关注 0票数 0

我正在尝试获得一个随机的HSV颜色,然后将其转换为RGB以供使用。有没有人知道我该怎么做?谢谢,山姆。到目前为止,我得到的是:第一种方法将HSV转换为具有指定值的RGB,第二种方法用于获取随机颜色。

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-11 01:46:12

您可以在以下位置找到java.awt.Color.RGBtoHSB(...)的相关文档:http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/Color.html

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

代码语言:javascript
复制
int red = (int) (Math.random() * 256)
int green = (int) (Math.random() * 256)
int blue = (int) (Math.random() * 256)

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17577386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档