Frage

Ich habe einen Blick auf die Farbspace -Klasse gesehen und die Konstante gefunden TYPE_HLS (die vermutlich ist nur HSL in einer anderen Reihenfolge).

Kann ich diese Konstante verwenden, um a zu erstellen? Color Aus Farbton, Sättigung und Leuchtkraft? Wenn nicht, gibt es dafür Java -Kurse oder muss ich meine eigenen schreiben?

War es hilfreich?

Andere Tipps

Die meisten der angegebenen Antworten hier scheinen davon auszugehen, dass HSL == HSB, was falsch ist. Der HSB -Farbspace ist in vielen Fällen nützlich (und verwendet), aber es gibt eine bemerkenswerte Ausnahme: CSS. Die Farbfunktionen der Nicht-RGB-CSS sind HSL () und HSLA () HSL, nicht HSB. Daher ist es sehr nützlich, in Java zu und von HSL konvertieren zu können.

Hier gibt es eine gute Erstellung über das Problem: http://tips4java.wordpress.com/2009/07/05/HSL-BOROR/ TL; DR: Der Code ist hier: http://www.camick.com/java/source/hslcolor.java

Die darin enthaltenen Methoden sind ziemlich einfach zu extrahieren, wenn Sie nicht die gesamte Klasse verwenden möchten.

Es scheint nicht, dass der Autor der Klasse eine Lizenz enthielt, obwohl der Kontext des Blog -Beitrags öffentlich zu impliziert scheint. Verwenden Sie Ihr eigenes Urteilsvermögen.

Bearbeiten: Ich erkenne HSB! = HSL, die Antwort unten ist für HSB.

Ich glaube nicht, dass hier Farbenpaces verwendet werden muss. Probieren Sie so etwas wie Folgendes aus:

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

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

Hier ist eine einfache Implementierung, die eine Farbe zurückgibt, die auf Farbton-, Sättigungs- und Helligkeitswerten von 0,0 bis 1,0 basiert ...

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

Bearbeiten von Yona-Appletree:

Ich fand, was ich für die richtige HUE2RGB -Funktion halte und sie als Arbeit getestet hat:

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

Vielleicht Dies wird helfen. Der JDK scheint nicht sehr hilfreich zu sein, wenn man Farben in einem anderen Farbraum verwenden möchte.

EDIT: IN ColorSpace.getName(idx) Da ist dieser kleine Ausschnitt:

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

Es war also das, was Sie gedacht haben, aber wenn Sie sich die Typhierarchie des Farbenbereichs ansehen, scheint es in keiner Weise verwendet oder implementiert zu werden. ColorSpace wird nur durch zwei andere Klassen Boguscolorspace und ICC_Colorspace erweitert. Ich vermute, dass sie erwarten, dass Entwickler ihre eigenen Implementierungen für verschiedene Farbräume erstellen.

Wenn Ihre Eingabe Swing/AWT -Widgets ist, dann mit Java 7 Jcolorchooser Sie können Farbe mit HSV- und HSL -Spaces erhalten. http://java.dzone.com/articles/new-forst-chooser-jdk-7

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top