我正在尝试获得随机的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;
}
答案 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(...)
函数。