[API] Add ImColor#hslToColor methods

This commit is contained in:
SpaiR committed 2021-01-23 21:19:13 +02:00
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;
}
}