labToHex function
Implementation
String labToHex(LAB lab) {
double y = (lab.l + 16) / 116,
x = lab.a / 500 + y,
z = y - lab.b / 200,
r,
g,
b;
x = 0.95047 * ((x * x * x > 0.008856) ? x * x * x : (x - 16 / 116) / 7.787);
y = 1.00000 * ((y * y * y > 0.008856) ? y * y * y : (y - 16 / 116) / 7.787);
z = 1.08883 * ((z * z * z > 0.008856) ? z * z * z : (z - 16 / 116) / 7.787);
r = x * 3.2406 + y * -1.5372 + z * -0.4986;
g = x * -0.9689 + y * 1.8758 + z * 0.0415;
b = x * 0.0557 + y * -0.2040 + z * 1.0570;
r = (r > 0.0031308) ? (1.055 * pow(r, 1 / 2.4) - 0.055) : 12.92 * r;
g = (g > 0.0031308) ? (1.055 * pow(g, 1 / 2.4) - 0.055) : 12.92 * g;
b = (b > 0.0031308) ? (1.055 * pow(b, 1 / 2.4) - 0.055) : 12.92 * b;
Function toHex = (double x) {
var hex = (x * 255).round().toRadixString(16);
return hex.length == 1 ? '0' + hex : hex;
};
return "#" +
toHex(max(0, min(1, r)).toDouble()) +
toHex(max(0, min(1, g)).toDouble()) +
toHex(max(0, min(1, b)).toDouble());
}