philips-hue-light-api
Version:
An API client for the Philips Hue API.
76 lines • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
class ColorConverter {
static convertRGBToXY(rgbColor) {
const redNormalizedToOne = (rgbColor.red / 255);
const greenNormalizedToOne = (rgbColor.green / 255);
const blueNormalizedToOne = (rgbColor.blue / 255);
let red;
if (redNormalizedToOne > 0.04045) {
red = Math.pow((redNormalizedToOne + 0.055) / (1.0 + 0.055), 2.4);
}
else {
red = redNormalizedToOne / 12.92;
}
let green;
if (greenNormalizedToOne > 0.04045) {
green = Math.pow((greenNormalizedToOne + 0.055) / (1.0 + 0.055), 2.4);
}
else {
green = greenNormalizedToOne / 12.92;
}
let blue;
if (blueNormalizedToOne > 0.04045) {
blue = Math.pow((blueNormalizedToOne + 0.055) / (1.0 + 0.055), 2.4);
}
else {
blue = blueNormalizedToOne / 12.92;
}
const X = red * 0.649926 + green * 0.103455 + blue * 0.197109;
const Y = red * 0.234327 + green * 0.743075 + blue * 0.022598;
const Z = red * 0.0000000 + green * 0.053077 + blue * 1.035763;
const x = X / (X + Y + Z);
const y = Y / (X + Y + Z);
return {
x: x,
y: y,
};
}
static convertXYtoRGB(colorAsXY, brightness) {
const x = colorAsXY.x;
const y = colorAsXY.y;
const z = 1.0 - x - y;
const Y = brightness / 255.0;
const X = (Y / y) * x;
const Z = (Y / y) * z;
let r = X * 1.612 - Y * 0.203 - Z * 0.302;
let g = -X * 0.509 + Y * 1.412 + Z * 0.066;
let b = X * 0.026 - Y * 0.072 + Z * 0.962;
r = r <= 0.0031308 ? 12.92 * r : (1.0 + 0.055) * Math.pow(r, (1.0 / 2.4)) - 0.055;
g = g <= 0.0031308 ? 12.92 * g : (1.0 + 0.055) * Math.pow(g, (1.0 / 2.4)) - 0.055;
b = b <= 0.0031308 ? 12.92 * b : (1.0 + 0.055) * Math.pow(b, (1.0 / 2.4)) - 0.055;
const maxValue = Math.max(r, g, b);
r /= maxValue;
g /= maxValue;
b /= maxValue;
r = r * 255;
if (r < 0) {
r = 0;
}
g = g * 255;
if (g < 0) {
g = 0;
}
b = b * 255;
if (b < 0) {
b = 0;
}
return {
red: Math.round(r),
green: Math.round(g),
blue: Math.round(b),
};
}
}
exports.ColorConverter = ColorConverter;
//# sourceMappingURL=ColorConverter.js.map