#include <stdexcept> #include "colorutils.h" #include <stdexcept> namespace rendering { QList<qreal> ColorUtils::lightnessCompensation_ = {0.55, 0.5, 0.5, 0.46, 0.6, 0.55, 0.55}; QColor ColorUtils::fromHslCompensated(qreal hue, qreal saturation, qreal lightness) { if (hue < 0) throw new std::out_of_range("hue"); if (hue > 1) throw new std::out_of_range("hue"); qreal lightnessCompensation = lightnessCompensation_[qFloor(hue * 6 + 0.5)]; // Adjust the input lightness relative to the compensation lightness = lightness < 0.5 ? lightness * lightnessCompensation * 2.0 : lightnessCompensation + (lightness - 0.5) * (1 - lightnessCompensation) * 2.0; return QColor::fromHslF(hue, saturation, lightness); } } // namespace rendering