Fixes
This commit is contained in:
+13
-11
@@ -11,27 +11,29 @@ export default class HSL {
|
||||
this.lightness = lightness
|
||||
}
|
||||
|
||||
// https://en.wikipedia.org/wiki/RGB_color_model
|
||||
// https://en.wikipedia.org/wiki/HSL_and_HSV
|
||||
public static fromRgb(rgb: RGB) {
|
||||
const redValue = rgb.red / 255,
|
||||
greenValue = rgb.green / 255,
|
||||
blueValue = rgb.blue / 255,
|
||||
lightness = (redValue + greenValue + blueValue) / 3,
|
||||
max = Math.max(redValue, greenValue, blueValue),
|
||||
min = Math.min(redValue, greenValue, blueValue),
|
||||
chroma = max - min,
|
||||
lightness = .5 * (max + min),
|
||||
saturation = 1 - (3 / (redValue + greenValue + blueValue)) * Math.min(redValue, greenValue, blueValue)
|
||||
|
||||
const dividend = (redValue - greenValue) + (redValue - blueValue)
|
||||
const divisor = 2 * Math.sqrt((redValue - greenValue) ^ 2 + (redValue - blueValue) * (greenValue - blueValue))
|
||||
let hue = (1 / Math.cos(dividend / divisor))
|
||||
if (greenValue > blueValue) hue = 360 - hue
|
||||
let huePrime = 0
|
||||
if (chroma != 0) {
|
||||
if (redValue == max) huePrime = ((greenValue - blueValue) / chroma) % 6
|
||||
else if (greenValue == max) huePrime = ((blueValue - redValue) / chroma) + 2
|
||||
else huePrime = ((redValue - greenValue) / chroma) + 4
|
||||
}
|
||||
|
||||
return new HSL(hue, saturation, lightness)
|
||||
return new HSL(huePrime * 60, saturation, lightness)
|
||||
}
|
||||
|
||||
public static fromHex(color: number): HSL {
|
||||
const red = color >> 16
|
||||
const green = (color - (red << 16)) >> 8
|
||||
const blue = color - (red << 16) - (green << 8)
|
||||
return HSL.fromRgb(new RGB(red, green, blue))
|
||||
return HSL.fromRgb(RGB.fromHex(color))
|
||||
}
|
||||
|
||||
public toHex(): number {
|
||||
|
||||
Reference in New Issue
Block a user