0

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

カラー チューザーが 180,50,50 の HSV を表示すると、コンポーネントの値は 0.24938,0.49749,0.49793 になります

色からfloat配列をリクエストしていることに気づきますが、getHue()などのメソッドがありません。

4

2 に答える 2

2

ここに示すように、チューザーから取得しColor.RGBtoHSB()た の RGB コンポーネントを使用して呼び出します。 Color

于 2013-08-12T13:55:53.470 に答える
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];
}

私たちが与える値と返される値にわずかな違いがあることは知っていますが、これ以上正確にすることはできません!

于 2013-08-12T14:17:40.040 に答える