oklabToRgba function
Converts OKLab to sRGB.
Implementation
AstryxRgba oklabToRgba({
required double l,
required double aLab,
required double bLab,
double alpha = 1,
}) {
// OKLab -> LMS (cube roots)
final lCbrt = l + 0.3963377774 * aLab + 0.2158037573 * bLab;
final mCbrt = l - 0.1055613458 * aLab - 0.0638541728 * bLab;
final sCbrt = l - 0.0894841775 * aLab - 1.2914855480 * bLab;
final lms = lCbrt * lCbrt * lCbrt;
final mms = mCbrt * mCbrt * mCbrt;
final sms = sCbrt * sCbrt * sCbrt;
// LMS -> linear sRGB
final rLinear = 4.0767416621 * lms - 3.3077115913 * mms + 0.2309699292 * sms;
final gLinear = -1.2684380046 * lms + 2.6097574011 * mms - 0.3413193965 * sms;
final bLinear = -0.0041960863 * lms - 0.7034186147 * mms + 1.7076147010 * sms;
return AstryxRgba(
r: clampDouble(_gammaEncode(rLinear) * 255, 0, 255),
g: clampDouble(_gammaEncode(gLinear) * 255, 0, 255),
b: clampDouble(_gammaEncode(bLinear) * 255, 0, 255),
a: alpha,
);
}