[babl] CIE: Make the XYZ to LAB code look similar to the RGB to LAB code
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] CIE: Make the XYZ to LAB code look similar to the RGB to LAB code
- Date: Sat, 28 Apr 2018 22:22:29 +0000 (UTC)
commit 7e7de1095bfbe0e548461464056c6f56afff0e18
Author: Debarshi Ray <debarshir freedesktop org>
Date: Sun Apr 29 00:21:44 2018 +0200
CIE: Make the XYZ to LAB code look similar to the RGB to LAB code
Such superficial differences make the code harder to scan when looking
for bugs and optimization opportunities.
extensions/CIE.c | 51 ++++++++++++++++++---------------------------------
1 files changed, 18 insertions(+), 33 deletions(-)
---
diff --git a/extensions/CIE.c b/extensions/CIE.c
index b6fa513..cb70d0f 100644
--- a/extensions/CIE.c
+++ b/extensions/CIE.c
@@ -172,24 +172,17 @@ XYZ_to_LAB (double X,
double *to_a,
double *to_b)
{
- double f_x, f_y, f_z;
+ double xr = X / D50_WHITE_REF_X;
+ double yr = Y / D50_WHITE_REF_Y;
+ double zr = Z / D50_WHITE_REF_Z;
- double x_r = X / D50_WHITE_REF_X;
- double y_r = Y / D50_WHITE_REF_Y;
- double z_r = Z / D50_WHITE_REF_Z;
+ double fx = xr > LAB_EPSILON ? cbrt (xr) : (LAB_KAPPA * xr + 16.0) / 116.0;
+ double fy = yr > LAB_EPSILON ? cbrt (yr) : (LAB_KAPPA * yr + 16.0) / 116.0;
+ double fz = zr > LAB_EPSILON ? cbrt (zr) : (LAB_KAPPA * zr + 16.0) / 116.0;
- if (x_r > LAB_EPSILON) f_x = cbrt(x_r);
- else ( f_x = ((LAB_KAPPA * x_r) + 16) / 116.0 );
-
- if (y_r > LAB_EPSILON) f_y = cbrt(y_r);
- else ( f_y = ((LAB_KAPPA * y_r) + 16) / 116.0 );
-
- if (z_r > LAB_EPSILON) f_z = cbrt(z_r);
- else ( f_z = ((LAB_KAPPA * z_r) + 16) / 116.0 );
-
- *to_L = (116.0 * f_y) - 16.0;
- *to_a = 500.0 * (f_x - f_y);
- *to_b = 200.0 * (f_y - f_z);
+ *to_L = 116.0 * fy - 16.0;
+ *to_a = 500.0 * (fx - fy);
+ *to_b = 200.0 * (fy - fz);
}
static inline void
@@ -200,26 +193,18 @@ LAB_to_XYZ (double L,
double *to_Y,
double *to_Z)
{
- double fy, fx, fz, fx_cubed, fy_cubed, fz_cubed;
- double xr, yr, zr;
-
- fy = (L + 16.0) / 116.0;
- fy_cubed = fy*fy*fy;
-
- fz = fy - (b / 200.0);
- fz_cubed = fz*fz*fz;
-
- fx = (a / 500.0) + fy;
- fx_cubed = fx*fx*fx;
+ double fy = (L + 16.0) / 116.0;
+ double fy_cubed = fy * fy * fy;
- if (fx_cubed > LAB_EPSILON) xr = fx_cubed;
- else xr = ((116.0 * fx) - 16) / LAB_KAPPA;
+ double fx = fy + a / 500.0;
+ double fx_cubed = fx * fx * fx;
- if ( L > (LAB_KAPPA * LAB_EPSILON) ) yr = fy_cubed;
- else yr = (L / LAB_KAPPA);
+ double fz = fy - b / 200.0;
+ double fz_cubed = fz * fz * fz;
- if (fz_cubed > LAB_EPSILON) zr = fz_cubed;
- else zr = ( (116.0 * fz) - 16 ) / LAB_KAPPA;
+ double yr = L > LAB_KAPPA * LAB_EPSILON ? fy_cubed : L / LAB_KAPPA;
+ double xr = fx_cubed > LAB_EPSILON ? fx_cubed : (fx * 116.0 - 16.0) / LAB_KAPPA;
+ double zr = fz_cubed > LAB_EPSILON ? fz_cubed : (fz * 116.0 - 16.0) / LAB_KAPPA;
*to_X = xr * D50_WHITE_REF_X;
*to_Y = yr * D50_WHITE_REF_Y;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]