[API] Add ImColor#hslToColor methods
This commit is contained in:
1 parent
7043cd642b
commit
d7a87ed508
1 file changed
+61
@@ -45,4 +45,65 @@ public final class ImColor {
|
||||
Integer.parseInt(hex.substring(7, 9), 16)
|
||||
);
|
||||
}
|
||||
|
||||
public static int hslToColor(final int h, final int s, final int l) {
|
||||
return hslToColor(h, s, l, 1);
|
||||
}
|
||||
|
||||
public static int hslToColor(final int h, final int s, final int l, final float a) {
|
||||
return hslToColor(h / 360f, s / 100f, l / 100f, a);
|
||||
}
|
||||
|
||||
public static int hslToColor(final float h, final float s, final float l) {
|
||||
return hslToColor(h, s, l, 1);
|
||||
}
|
||||
|
||||
public static int hslToColor(final float h, final float s, final float l, final float a) {
|
||||
final float q;
|
||||
final float p;
|
||||
final float r;
|
||||
final float g;
|
||||
final float b;
|
||||
|
||||
// Achromatic
|
||||
if (s == 0) {
|
||||
r = l;
|
||||
g = l;
|
||||
b = l;
|
||||
} 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 floatToColor(r, g, b, a);
|
||||
}
|
||||
|
||||
private static float hue2rgb(final float p, final float q, final float hue) {
|
||||
float h = hue;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user