我在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

我意识到我要从颜色请求一个float数组,但是没有诸如getHue()这样的方法。

最佳答案

要从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];
}


我知道我们提供的值与返回的值之间存在细微的差异,但您不能再准确地做到这一点!

10-06 02:15