rgbaToLab static method
Implementation
static Lab rgbaToLab({
required int r,
required int g,
required int b,
int a = 255,
Rgba? bg,
}) {
bg ??= kDefaultBgColor;
// RGBA -> RGB
final double pAlpha = (a) / 255;
double pR = r.toDouble();
double pG = g.toDouble();
double pB = b.toDouble();
pR = (1 - pAlpha) * bg.r + pR * pAlpha;
pG = (1 - pAlpha) * bg.g + pG * pAlpha;
pB = (1 - pAlpha) * bg.b + pB * pAlpha;
// normalize colors
pR = pR / 255.0;
pG = pG / 255.0;
pB = pB / 255.0;
// convert to xyz
pR = _normalizeColor(pR);
pG = _normalizeColor(pG);
pB = _normalizeColor(pB);
double x = (pR * 0.4124 + pG * 0.3576 + pB * 0.1805) * 100;
double y = (pR * 0.2126 + pG * 0.7152 + pB * 0.0722) * 100;
double z = (pR * 0.0193 + pG * 0.1192 + pB * 0.9505) * 100;
// convert to lab
x = (x / 95.047);
y = (y / 100.0);
z = (z / 108.883);
x = _normalizeXYZ(x);
y = _normalizeXYZ(y);
z = _normalizeXYZ(z);
return Lab(
double.parse(((116.0 * y) - 16.0).toStringAsFixed(3)),
double.parse((500.0 * (x - y)).toStringAsFixed(3)),
double.parse((200.0 * (y - z)).toStringAsFixed(3)),
);
}