ws2801-alexa
Version:
An alexa connector for the WS2801-Pi module.
81 lines (80 loc) • 2.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ColorConverter = void 0;
class ColorConverter {
static convertHueToRgb(hueColor) {
const c = hueColor.brightness * hueColor.saturation;
const x = c * (1 - Math.abs((hueColor.hue / 60) % 2 - 1));
const m = hueColor.brightness - c;
let red1;
let green1;
let blue1;
if (hueColor.hue >= 0 && hueColor.hue < 60) {
red1 = c;
green1 = x;
blue1 = 0;
}
else if (hueColor.hue >= 60 && hueColor.hue < 120) {
red1 = x;
green1 = c;
blue1 = 0;
}
else if (hueColor.hue >= 120 && hueColor.hue < 180) {
red1 = 0;
green1 = c;
blue1 = x;
}
else if (hueColor.hue >= 180 && hueColor.hue < 240) {
red1 = 0;
green1 = x;
blue1 = c;
}
else if (hueColor.hue >= 240 && hueColor.hue < 300) {
red1 = x;
green1 = 0;
blue1 = c;
}
else if (hueColor.hue >= 300 && hueColor.hue < 360) {
red1 = c;
green1 = 0;
blue1 = x;
}
else {
throw new Error(`Hue value ${hueColor.hue} is not supported!`);
}
return {
red: (red1 + m) * 255,
green: (green1 + m) * 255,
blue: (blue1 + m) * 255,
};
}
static convertRgbToHue(rgbColor) {
const red1 = rgbColor.red / 255;
const green1 = rgbColor.green / 255;
const blue1 = rgbColor.blue / 255;
const cMax = Math.max(red1, green1, blue1);
const cMin = Math.min(red1, green1, blue1);
const delta = cMax - cMin;
let hue;
if (delta === 0) {
hue = 0;
}
else if (cMax === red1) {
hue = 60 * (((green1 - blue1) / delta) % 6);
}
else if (cMax === green1) {
hue = 60 * ((blue1 - red1) / delta + 2);
}
else if (cMax === blue1) {
hue = 60 * ((red1 - green1) / delta + 4);
}
const saturation = cMax === 0 ? 0 : delta / cMax;
const brightness = cMax;
return {
hue: hue,
saturation: saturation,
brightness: brightness,
};
}
}
exports.ColorConverter = ColorConverter;