21

ColorSpaceクラスを調べたところ、定数が見つかりましたTYPE_HLSおそらく、順序が異なるHSLだけです)。

この定数を使用してColor、色相、彩度、明度から作成できますか?そうでない場合、このためのJavaクラスはありますか、それとも自分で作成する必要がありますか?

4

6 に答える 6

12

編集:私はHSB!= HSLを認識しています、以下の答えはHSBに対するものです。

ここでColorSpacesを使用する必要はないと思います。次のようなものを試してください。

float hue = 0.9f; //hue
float saturation = 1.0f; //saturation
float brightness = 0.8f; //brightness

Color myRGBColor = Color.getHSBColor(hue, saturation, brightness);
于 2010-06-08T13:55:21.547 に答える
12

ここで与えられた答えのほとんどは、HSL == HSBであると想定しているようですが、これは誤りです。HSB色空間は多くの場合に役立ちます(そして使用されます)が、注目すべき例外が1つあります。それはCSSです。非RGBcssカラー関数hsl()およびhsla()はHSLであり、HSBではありません。そのため、JavaでHSLとの間で変換できると非常に便利です。

ここに問題についての良い記事があります:http://tips4java.wordpress.com/2009/07/05/hsl-color/ TL ; DR:コードはここにあります:http://www.camick.com/java /source/HSLColor.java

ブログがダウンした場合に備えて、要点のバックアップを作成しました:https ://gist.github.com/Yona-Appletree/0c4b58763f070ae8cdff7db583c82563

クラス全体を使用したくない場合は、その中のメソッドを簡単に抽出できます。

ライセンス

ブログの「About」ページ(https://tips4java.wordpress.com/about/)に記載されているように、コードはパブリックドメインにあるようです。

We assume no responsibility for the code. You are free to use and/or modify and/or distribute any or all code posted on the Java Tips Weblog without restriction. A credit in the code comments would be nice, but not in any way mandatory.
于 2013-12-30T18:32:52.967 に答える
8

これは、0.0から1.0までの色相、彩度、明度の値に基づいて色を返す単純な実装です。

static public Color hslColor(float h, float s, float l) {
    float q, p, r, g, b;

    if (s == 0) {
        r = g = b = l; // achromatic
    } else {
        q = l < 0.5 ? (l * (1 + s)) : (l + s - l * s);
        p = 2 * l - q;
        r = hue2rgb(p, q, h + 1.0f / 3);
        g = hue2rgb(p, q, h);
        b = hue2rgb(p, q, h - 1.0f / 3);
    }
    return new Color(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255));
}

Yona-Appletreeによる編集:

私は正しいhue2rgb関数であると思うものを見つけ、それが機能していることをテストしました。

private static float hue2rgb(float p, float q, float h) {
    if (h < 0) {
        h += 1;
    }

    if (h > 1) {
        h -= 1;
    }

    if (6 * h < 1) {
        return p + ((q - p) * 6 * h);
    }

    if (2 * h < 1) {
        return q;
    }

    if (3 * h < 2) {
        return p + ((q - p) * 6 * ((2.0f / 3.0f) - h));
    }

    return p;
}
于 2015-11-26T21:55:54.147 に答える
3

HSBの組み込みメソッドを見つけました(これはHSLと同じではありませんが、類似しています)

[Color.getHSBColor(float h、float s、float b)](http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#getHSBColor(float,%20float,% 20float))
于 2010-06-08T13:50:18.220 に答える
1

多分これは役立つでしょう。JDKは、別の色空間で色を使用したい場合にはあまり役に立たないようです。

編集:ColorSpace.getName(idx)この小さなスニペットがあります:

 case ColorSpace.TYPE_HLS:
                    compName = new String[] {"Hue", "Lightness", 
                                             "Saturation"};

それはあなたが思っていたものでしたが、ColorSpaceの型階層を見ると、どこでも使用または実装されていないようです。ColorSpaceは、他の2つのクラスBogusColorSpaceとICC_ColorSpaceによってのみ拡張されているため、開発者がさまざまな色空間用に独自の実装を作成することを期待していると思います。

于 2010-06-08T13:39:14.623 に答える
0

入力がswing/awtウィジェットの場合、Java 7 JColorChooserを使用すると、HSVおよびHSLスペースで色を取得できます。http://java.dzone.com/articles/new-color-chooser-jdk-7

于 2013-01-30T10:57:13.420 に答える