284 float r = rgb.
r / 255.0;
285 float g = rgb.
g / 255.0;
286 float b = rgb.
b / 255.0;
289 r = (r > 0.04045) ? std::pow((r + 0.055) / 1.055, 2.4) : r / 12.92;
290 g = (g > 0.04045) ? std::pow((g + 0.055) / 1.055, 2.4) : g / 12.92;
291 b = (b > 0.04045) ? std::pow((b + 0.055) / 1.055, 2.4) : b / 12.92;
293 float x = r * 0.4124564 + g * 0.3575761 + b * 0.1804375;
294 float y = r * 0.2126729 + g * 0.7151522 + b * 0.0721750;
295 float z = r * 0.0193339 + g * 0.1191920 + b * 0.9503041;
302 x = (x > 0.008856) ? std::pow(x, 1.0 / 3.0) : (x * 7.787 + 16 / 116.0);
303 y = (
y > 0.008856) ? std::pow(
y, 1.0 / 3.0) : (
y * 7.787 + 16 / 116.0);
304 z = (z > 0.008856) ? std::pow(z, 1.0 / 3.0) : (z * 7.787 + 16 / 116.0);
306 lab.
l = (116 *
y) - 16;
307 lab.
a = 500 * (x -
y);
308 lab.
b = 200 * (
y - z);
324 float y = (lab.
l + 16) / 116;
325 float x = lab.
a / 500 +
y;
326 float z =
y - lab.
b / 200;
329 y = std::pow(
y, 3) > 0.008856 ? std::pow(
y, 3) : (
y - 16 / 116) / 7.787;
330 x = std::pow(x, 3) > 0.008856 ? std::pow(x, 3) : (x - 16 / 116) / 7.787;
331 z = std::pow(z, 3) > 0.008856 ? std::pow(z, 3) : (z - 16 / 116) / 7.787;
337 rgb.
r =
static_cast<int>(std::clamp((x * 3.2404542 -
y * 1.5371385 - z * 0.4985314) * 255, 0.0, 255.0));
338 rgb.
g =
static_cast<int>(std::clamp((-x * 0.9692660 +
y * 1.8760108 + z * 0.0415560) * 255, 0.0, 255.0));
339 rgb.
b =
static_cast<int>(std::clamp((x * 0.0556434 -
y * 0.2040259 + z * 1.0572252) * 255, 0.0, 255.0));