Merge pull request #11963 from tamuratak/srgb_conv

Avoid calling Math.pow if possible.
This commit is contained in:
Tim van der Meij 2020-06-07 13:09:41 +02:00 committed by GitHub
commit b779507370
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1057,6 +1057,15 @@ const CalRGBCS = (function CalRGBCSClosure() {
if (color <= 0.0031308) {
return adjustToRange(0, 1, 12.92 * color);
}
// Optimization:
// If color is close enough to 1, skip calling the following transform
// since calling Math.pow is expensive. If color is larger than
// the threshold, the final result is larger than 254.5 since
// ((1 + 0.055) * 0.99554525 ** (1 / 2.4) - 0.055) * 255 ===
// 254.50000003134699
if (color >= 0.99554525) {
return 1;
}
return adjustToRange(0, 1, (1 + 0.055) * color ** (1 / 2.4) - 0.055);
}
@ -1156,9 +1165,9 @@ const CalRGBCS = (function CalRGBCSClosure() {
// A <---> AGR in the spec
// B <---> BGG in the spec
// C <---> CGB in the spec
const AGR = A ** cs.GR;
const BGG = B ** cs.GG;
const CGB = C ** cs.GB;
const AGR = A === 1 ? 1 : A ** cs.GR;
const BGG = B === 1 ? 1 : B ** cs.GG;
const CGB = C === 1 ? 1 : C ** cs.GB;
// Computes intermediate variables L, M, N as per spec.
// To decode X, Y, Z values map L, M, N directly to them.