JColorChooser将Hue,Saturation和Value表示为整数。如何从Color对象获取这些值?

时间:2013-08-12 12:57:31

标签: java swing colors hsv jcolorchooser

我在HSV色彩空间中使用Java Swing JColorChooser。此小部件使用微调器来调整颜色。色调为0-360,饱和度为0-100,值为0-100。我只能为组件值获取浮点值。我想在用户选择颜色后在标签中显示组件值,但我无法弄清楚如何获得与JColorChooser中相同的值。我的代码:

private String getColorString(Color color)
{
    float[] comp = color.getColorComponents(chooser.getColorModel().getColorSpace(),
                                            null);

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

当我的颜色选择器显示的HSV为180,50,50时,我的元件值为0.24938,0.49749,0.49793

我意识到我从颜色请求一个浮点数组,但没有像getHue()这样的方法。

2 个答案:

答案 0 :(得分:2)

使用从选择器获得的Color的RGB组件调用Color.RGBtoHSB(),如图here所示。

答案 1 :(得分: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];
}

我知道我们给出的值与返回的值之间存在细微差别但是你不能准确地超过这个值!