2013-07-10 2 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

예, HSV와 HSB가 동일하며 HSB의 임의 값을 가져와야합니다. 답은 맞지만 HSB 값이 필요합니다. 감사합니다. – user1009569