2013-08-12 6 views
0

HSV 색상 공간에서 Java Swing JColorChooser를 사용하고 있습니다. 이 위젯은 회 전자를 사용하여 색상을 조정합니다. 색조는 0-360이고 채도는 0-100이며 값은 0-100입니다. 난 단지 구성 요소 값에 대한 플로트 값을 다시 얻을 수 있습니다. 사용자가 색상을 선택한 후에 레이블에 구성 요소 값을 표시하려고하지만 JColorChooser에있는 것과 동일한 값을 가져 오는 방법을 알 수 없습니다. 내 코드 :JColorChooser는 색조, 채도 및 값을 정수로 나타냅니다. Color 객체에서 이러한 값을 얻으려면 어떻게해야합니까?

내 칼라 츄는 180,50,50의 HSV가 표시되면 내 구성 요소 값은
private String getColorString(Color color) 
{ 
    float[] comp = color.getColorComponents(chooser.getColorModel().getColorSpace(), 
              null); 

    return comp[0] + ", " + comp[1] + ", " + comp[2]; 
} 

0.24938,0.49749,0.49793

나는, 나는 색상에서 float 배열을 요구하고 실현하지만, getHue()와 같은 메소드가 없습니다.

+0

색상에 getColorSpace()를 인쇄하여 그 모습을 표시하십시오. – Xabster

+0

[email protected] –

답변

2

jColorChooser에서 HSB (HSV와 동일)를 얻으려면 다음과 같이 Color.RGBtoHSB()를 사용할 수 있습니다.

Color c = jColorChooser1.getColor(); 
float[] comp = new float[3]; 
Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), comp); 
comp[0]*= 360; 
comp[1]*= 100; 
comp[2]*= 100; 
return comp[0]+", "+comp[1]+", "+comp[2]; 

또는 당신의 방법에 당신은 우리가 제공 가치에 반환되는 값의 작은 차이가 있음을 알고이

private String getColorString(Color color) 
{ 
    float[] comp = new float[3]; 
    Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), comp); 
    comp[0]*= 360; 
    comp[1]*= 100; 
    comp[2]*= 100; 
    return comp[0]+", "+comp[1]+", "+comp[2]; 
} 

처럼 구현할 수 있지만보다 정확한 갈 수 없어 이것보다!

+0

감사합니다. 반환 된 값을 정수로 반올림하여 매우 가까워졌습니다. 숫자가 선택기 컨트롤과 일치하지 않는 경우가 종종 있습니다. 이것은 불행합니다. 사용자는 구성 요소 값을 실제로 알 필요가 없으므로 JColorChooser를 시작하는 버튼에 선택 항목을 색상 아이콘으로 나타내려고합니다. –

+0

그래, 그 값을 반올림하면 문제를 해결할 수 없다는 것을 알았습니다. 그것이 내가 얻을 수있는 가장 정확한 것이라고 말한 이유입니다. – JProgrammer

+0

값과 채도가 0이면이 작업을 수행 할 수 없습니다. 예 : JColorChooser가 (r, g, b) = (0,0,0)을 반환하고 Color.RGBtoHSB가 (h, s, v) = (42,0,0) v) = (0, 0, 0). 이것이 중요한 경우가 있습니다 (예 : hsv에서 색상 보간을 원한다면. –