2013-07-10 304 views
0

我试图获得随机HSV颜色,然后将其转换为RGB使用。有没有人有任何想法,我该如何做到这一点?谢谢,山姆。我到目前为止:第一种方法用指定的值将HSV转换为RGB,第二种方法用于获得随机颜色。随机HSV颜色

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

回答

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(...)函数。

+0

不,我正在寻找生成随机HSV值。我不想获得“随机”RGB值,然后再转换成HSV。 – user1009569

+0

假设您可以轻松生成随机RGB值,如上面的代码片段所示,然后将这些RGB值转换为您的HSB值。我不知道HSV是什么,Google确认你可能是HSB。看到这里:http://stackoverflow.com/questions/2399150/convert-rgb-value-to-hsv – Kon

+0

是的,单纯疱疹病毒和HSB是相同的,我需要得到HSB的随机值。你的回答是正确的,但我需要随机的HSB值,谢谢。 – user1009569