JavaでHSLカラースペースを使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2997656

  •  24-10-2019
  •  | 
  •  

質問

Colorspaceクラスを見て、定数が見つかりました TYPE_HLS (どれの おそらく 別の順序でHSLだけです)。

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

役に立ちましたか?

他のヒント

ここで与えられた答えのほとんどは、HSL == HSBであると仮定しているようです。 HSBカラースペースは多くの場合有用です(および使用されます)が、1つの注目すべき例外はCSSです。非RGB CSS色関数、HSL()、およびHSLA()はHSBではなくHSLです。そのため、JavaのHSLとの間で変換できると非常に便利です。

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

クラス全体を使用したくない場合は、その方法は非常に簡単に抽出できます。

ブログ投稿のコンテキストはパブリックドメインを暗示しているように見えますが、クラスの著者にはライセンスが含まれているようには見えません。あなた自身の判断を使用してください。

編集:HSB!= HSLを認識しています。以下の答えはHSB用です。

ここでカラースペースを使用する必要はないと思います。次のようなものを試してください:

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

Color myRGBColor = Color.getHSBColor(hue, saturation, brightness);

これは、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;
}

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

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

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

それはあなたが思ったことでしたが、Colorspaceのタイプの階層を見ると、どこにでも使用も実装されていないようです。 Colorspaceは、他の2つのクラスのBoguscolorspaceとICC_ColorSpaceのみで拡張されているため、開発者が異なるカラースペースの独自の実装を作成することを期待していると思います。

入力がスイング/AWTウィジェットの場合、 Java 7 jcolorchooser HSVおよびHSLスペースで色を取得できます。 http://java.dzone.com/articles/new-color-chooser-jdk-7

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top