[babl] CIE: Add xyY color space conversions
- From: Øyvind "pippin" Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] CIE: Add xyY color space conversions
- Date: Wed, 3 Oct 2018 11:22:50 +0000 (UTC)
commit a1574f0660662f24588da3c5d0616d2f7e46b960
Author: Elle Stone <ellestone ninedegreesbelow com>
Date: Fri Sep 21 08:40:33 2018 -0400
CIE: Add xyY color space conversions
Issue #22
extensions/CIE.c | 724 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 668 insertions(+), 56 deletions(-)
---
diff --git a/extensions/CIE.c b/extensions/CIE.c
index d4d033d..1c8b70c 100644
--- a/extensions/CIE.c
+++ b/extensions/CIE.c
@@ -56,6 +56,9 @@
#define D50_WHITE_REF_Y 1.000000000f
#define D50_WHITE_REF_Z 0.824905400f
+#define NEAR_ZERO 0.0000000001f
+#define D50_WHITE_REF_x 0.345702921222f
+#define D50_WHITE_REF_y 0.358537532290f
static void types (void);
@@ -88,6 +91,9 @@ components (void)
babl_component_new ("CIE X", NULL);
babl_component_new ("CIE Y", NULL);
babl_component_new ("CIE Z", NULL);
+ babl_component_new ("CIE x", NULL);
+ babl_component_new ("CIE y", NULL);
+/* babl_component_new ("CIE z", NULL);*/
}
static void
@@ -137,6 +143,21 @@ models (void)
babl_component ("CIE Z"),
babl_component ("A"),
NULL);
+
+ babl_model_new (
+ "name", "CIE xyY",
+ babl_component ("CIE x"),
+ babl_component ("CIE y"),
+ babl_component ("CIE Y"),
+ NULL);
+
+ babl_model_new (
+ "name", "CIE xyY alpha",
+ babl_component ("CIE x"),
+ babl_component ("CIE y"),
+ babl_component ("CIE Y"),
+ babl_component ("A"),
+ NULL);
}
static void rgbcie_init (void);
@@ -169,6 +190,22 @@ static inline void LAB_to_XYZ (double L,
double *to_Z
);
+static inline void XYZ_to_xyY (double X,
+ double Y,
+ double Z,
+ double *to_x,
+ double *to_y,
+ double *to_Y
+ );
+
+static inline void xyY_to_XYZ (double x,
+ double y,
+ double Y,
+ double *to_X,
+ double *to_Y,
+ double *to_Z
+ );
+
static inline void
XYZ_to_LAB (double X,
double Y,
@@ -216,6 +253,52 @@ LAB_to_XYZ (double L,
*to_Z = zr * D50_WHITE_REF_Z;
}
+
+static inline void
+XYZ_to_xyY (double X,
+ double Y,
+ double Z,
+ double *to_x,
+ double *to_y,
+ double *to_Y)
+{
+ if ( X < NEAR_ZERO && Y < NEAR_ZERO && Z < NEAR_ZERO )
+ { *to_Y = 0.0;
+ *to_x = D50_WHITE_REF_x;
+ *to_y = D50_WHITE_REF_y;
+ }
+ else
+ {
+ *to_x = X / (X + Y + Z);
+ *to_y = Y / (X + Y + Z);
+ *to_Y = Y;
+ }
+}
+
+static inline void
+xyY_to_XYZ (double x,
+ double y,
+ double Y,
+ double *to_X,
+ double *to_Y,
+ double *to_Z)
+{
+ if ( Y < NEAR_ZERO )
+ { *to_X = 0.0;
+ *to_Y = 0.0;
+ *to_Z = 0.0;
+ }
+ else
+ {
+ *to_X = (x * Y) / y;
+ *to_Y = Y;
+ *to_Z = ((1 - x - y) * Y) / y;
+ }
+}
+
+
+/* rgb <-> XYZ */
+
static void
rgba_to_xyz (const Babl *conversion,char *src,
char *dst,
@@ -282,6 +365,447 @@ xyza_to_rgba (const Babl *conversion,char *src,
}
+/* rgb -> xyY */
+
+static void
+rgba_to_xyY (const Babl *conversion,char *src,
+ char *dst,
+ long n)
+{
+ const Babl *space = babl_conversion_get_source_space (conversion);
+ while (n--)
+ {
+ double XYZ[3], x, y, Y;
+
+ babl_space_to_xyz (space, (double*)src, XYZ);
+ XYZ_to_xyY (XYZ[0], XYZ[1], XYZ[2], &x, &y, &Y);
+
+ ((double *) dst)[0] = x;
+ ((double *) dst)[1] = y;
+ ((double *) dst)[2] = Y;
+
+ src += sizeof (double) * 4;
+ dst += sizeof (double) * 3;
+ }
+}
+
+static void
+rgba_to_xyYa (const Babl *conversion,char *src,
+ char *dst,
+ long n)
+{
+ const Babl *space = babl_conversion_get_source_space (conversion);
+ while (n--)
+ {
+ double alpha = ((double *) src)[3];
+ double XYZ[3], x, y, Y;
+
+ //convert RGB to XYZ
+ babl_space_to_xyz (space, (double*)src, XYZ);
+
+ //convert XYZ to xyY
+ XYZ_to_xyY (XYZ[0], XYZ[1], XYZ[2], &x, &y, &Y);
+
+ ((double *) dst)[0] = x;
+ ((double *) dst)[1] = y;
+ ((double *) dst)[2] = Y;
+ ((double *) dst)[3] = alpha;
+
+ src += sizeof (double) * 4;
+ dst += sizeof (double) * 4;
+ }
+}
+
+static void
+rgbaf_to_xyYaf (const Babl *conversion,
+ float *src,
+ float *dst,
+ long samples)
+{
+ const Babl *space = babl_conversion_get_source_space (conversion);
+ float m_0_0 = space->space.RGBtoXYZf[0] / D50_WHITE_REF_X;
+ float m_0_1 = space->space.RGBtoXYZf[1] / D50_WHITE_REF_X;
+ float m_0_2 = space->space.RGBtoXYZf[2] / D50_WHITE_REF_X;
+ float m_1_0 = space->space.RGBtoXYZf[3] / D50_WHITE_REF_Y;
+ float m_1_1 = space->space.RGBtoXYZf[4] / D50_WHITE_REF_Y;
+ float m_1_2 = space->space.RGBtoXYZf[5] / D50_WHITE_REF_Y;
+ float m_2_0 = space->space.RGBtoXYZf[6] / D50_WHITE_REF_Z;
+ float m_2_1 = space->space.RGBtoXYZf[7] / D50_WHITE_REF_Z;
+ float m_2_2 = space->space.RGBtoXYZf[8] / D50_WHITE_REF_Z;
+ long n = samples;
+
+ while (n--)
+ {
+ float x, y, X, Y, Z, r, g, b, a;
+ r = src[0];
+ g = src[1];
+ b = src[2];
+ a = src[3];
+
+ if ( r < NEAR_ZERO && g < NEAR_ZERO && b < NEAR_ZERO )
+ {
+ Y = 0.0f;
+ x = D50_WHITE_REF_x;
+ y = D50_WHITE_REF_y;
+ }
+
+ else
+ {
+ X = m_0_0 * r + m_0_1 * g + m_0_2 * b;
+ Y = m_1_0 * r + m_1_1 * g + m_1_2 * b;
+ Z = m_2_0 * r + m_2_1 * g + m_2_2 * b;
+
+ x = X / (X + Y + Z);
+ y = Y / (X + Y + Z);
+ }
+
+ dst[0] = x;
+ dst[1] = y;
+ dst[2] = Y;
+ dst[3] = a;
+
+ src += 4;
+ dst += 4;
+ }
+}
+
+static void
+rgbf_to_xyYf (const Babl *conversion,float *src,
+ float *dst,
+ long samples)
+{
+ const Babl *space = babl_conversion_get_source_space (conversion);
+ float m_0_0 = space->space.RGBtoXYZf[0] / D50_WHITE_REF_X;
+ float m_0_1 = space->space.RGBtoXYZf[1] / D50_WHITE_REF_X;
+ float m_0_2 = space->space.RGBtoXYZf[2] / D50_WHITE_REF_X;
+ float m_1_0 = space->space.RGBtoXYZf[3] / D50_WHITE_REF_Y;
+ float m_1_1 = space->space.RGBtoXYZf[4] / D50_WHITE_REF_Y;
+ float m_1_2 = space->space.RGBtoXYZf[5] / D50_WHITE_REF_Y;
+ float m_2_0 = space->space.RGBtoXYZf[6] / D50_WHITE_REF_Z;
+ float m_2_1 = space->space.RGBtoXYZf[7] / D50_WHITE_REF_Z;
+ float m_2_2 = space->space.RGBtoXYZf[8] / D50_WHITE_REF_Z;
+ long n = samples;
+
+ while (n--)
+ {
+ float x, y, X, Y, Z, r, g, b;
+ r = src[0];
+ g = src[1];
+ b = src[2];
+
+ if ( r < NEAR_ZERO && g < NEAR_ZERO && b < NEAR_ZERO )
+ {
+ Y = 0.0f;
+ x = D50_WHITE_REF_x;
+ y = D50_WHITE_REF_y;
+ }
+
+ else
+ {
+ X = m_0_0 * r + m_0_1 * g + m_0_2 * b;
+ Y = m_1_0 * r + m_1_1 * g + m_1_2 * b;
+ Z = m_2_0 * r + m_2_1 * g + m_2_2 * b;
+
+ x = X / (X + Y + Z);
+ y = Y / (X + Y + Z);
+ }
+
+ dst[0] = x;
+ dst[1] = y;
+ dst[2] = Y;
+
+ src += 3;
+ dst += 3;
+ }
+}
+
+
+static void
+rgbaf_to_xyYf (const Babl *conversion,
+ float *src,
+ float *dst,
+ long samples)
+{
+ const Babl *space = babl_conversion_get_source_space (conversion);
+ float m_0_0 = space->space.RGBtoXYZf[0] / D50_WHITE_REF_X;
+ float m_0_1 = space->space.RGBtoXYZf[1] / D50_WHITE_REF_X;
+ float m_0_2 = space->space.RGBtoXYZf[2] / D50_WHITE_REF_X;
+ float m_1_0 = space->space.RGBtoXYZf[3] / D50_WHITE_REF_Y;
+ float m_1_1 = space->space.RGBtoXYZf[4] / D50_WHITE_REF_Y;
+ float m_1_2 = space->space.RGBtoXYZf[5] / D50_WHITE_REF_Y;
+ float m_2_0 = space->space.RGBtoXYZf[6] / D50_WHITE_REF_Z;
+ float m_2_1 = space->space.RGBtoXYZf[7] / D50_WHITE_REF_Z;
+ float m_2_2 = space->space.RGBtoXYZf[8] / D50_WHITE_REF_Z;
+ long n = samples;
+
+ while (n--)
+ {
+ float x, y, X, Y, Z, r, g, b;
+ r = src[0];
+ g = src[1];
+ b = src[2];
+
+ if ( r < NEAR_ZERO && g < NEAR_ZERO && b < NEAR_ZERO )
+ {
+ Y = 0.0f;
+ x = D50_WHITE_REF_x;
+ y = D50_WHITE_REF_y;
+ }
+
+ else
+ {
+ X = m_0_0 * r + m_0_1 * g + m_0_2 * b;
+ Y = m_1_0 * r + m_1_1 * g + m_1_2 * b;
+ Z = m_2_0 * r + m_2_1 * g + m_2_2 * b;
+
+ x = X / (X + Y + Z);
+ y = Y / (X + Y + Z);
+ }
+
+ dst[0] = x;
+ dst[1] = y;
+ dst[2] = Y;
+
+ src += 4;
+ dst += 4;
+ }
+}
+
+
+/* xyY -> rgb */
+
+static void
+xyY_to_rgba (const Babl *conversion,char *src,
+ char *dst,
+ long n)
+{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
+ while (n--)
+ {
+ double x = ((double *) src)[0];
+ double y = ((double *) src)[1];
+ double Y = ((double *) src)[2];
+
+ double R, G, B, X, Z;
+
+ //convert xyY to XYZ
+ xyY_to_XYZ (x, y, Y, &X, &Y, &Z);
+
+ //convert XYZ to RGB
+ {
+ double XYZ[3] = {X,Y,Z};
+ double RGB[3];
+ babl_space_from_xyz (space, XYZ, RGB);
+ R = RGB[0];
+ G = RGB[1];
+ B = RGB[2];
+ }
+
+ ((double *) dst)[0] = R;
+ ((double *) dst)[1] = G;
+ ((double *) dst)[2] = B;
+ ((double *) dst)[3] = 1.0;
+
+ src += sizeof (double) * 3;
+ dst += sizeof (double) * 4;
+ }
+}
+
+
+static void
+xyYa_to_rgba (const Babl *conversion,char *src,
+ char *dst,
+ long n)
+{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
+ while (n--)
+ {
+ double x = ((double *) src)[0];
+ double y = ((double *) src)[1];
+ double Y = ((double *) src)[2];
+ double alpha = ((double *) src)[3];
+
+ double X, Z;
+
+ //convert xyY to XYZ
+ xyY_to_XYZ (x, y, Y, &X, &Y, &Z);
+
+ {
+ //convert XYZ to RGB
+ double XYZ[3] = {X,Y,Z};
+ babl_space_from_xyz (space, XYZ, (double*)dst);
+ }
+ ((double *) dst)[3] = alpha;
+
+ src += sizeof (double) * 4;
+ dst += sizeof (double) * 4;
+ }
+}
+
+
+static void
+xyYf_to_rgbf (const Babl *conversion,float *src,
+ float *dst,
+ long samples)
+{
+ const Babl *space = babl_conversion_get_source_space (conversion);
+ float m_0_0 = space->space.XYZtoRGBf[0] * D50_WHITE_REF_X;
+ float m_0_1 = space->space.XYZtoRGBf[1] * D50_WHITE_REF_Y;
+ float m_0_2 = space->space.XYZtoRGBf[2] * D50_WHITE_REF_Z;
+ float m_1_0 = space->space.XYZtoRGBf[3] * D50_WHITE_REF_X;
+ float m_1_1 = space->space.XYZtoRGBf[4] * D50_WHITE_REF_Y;
+ float m_1_2 = space->space.XYZtoRGBf[5] * D50_WHITE_REF_Z;
+ float m_2_0 = space->space.XYZtoRGBf[6] * D50_WHITE_REF_X;
+ float m_2_1 = space->space.XYZtoRGBf[7] * D50_WHITE_REF_Y;
+ float m_2_2 = space->space.XYZtoRGBf[8] * D50_WHITE_REF_Z;
+ long n = samples;
+
+ while (n--)
+ {
+ float X, Z, r, g, b;
+ float x = src[0];
+ float y = src[1];
+ float Y = src[2];
+
+
+ if ( Y < NEAR_ZERO )
+ {
+ X = 0.0f;
+ Y = 0.0f;
+ Z = 0.0f;
+ }
+ else
+ {
+ X = (x * Y) / y;
+ Y = Y;
+ Z = ((1 - x - y) * Y) / y;
+ }
+
+ r = m_0_0 * X + m_0_1 * Y + m_0_2 * Z;
+ g = m_1_0 * X + m_1_1 * Y + m_1_2 * Z;
+ b = m_2_0 * X + m_2_1 * Y + m_2_2 * Z;
+
+ dst[0] = r;
+ dst[1] = g;
+ dst[2] = b;
+
+ src += 3;
+ dst += 3;
+ }
+}
+
+
+
+static void
+xyYf_to_rgbaf (const Babl *conversion,
+ float *src,
+ float *dst,
+ long samples)
+{
+ const Babl *space = babl_conversion_get_source_space (conversion);
+ float m_0_0 = space->space.XYZtoRGBf[0] * D50_WHITE_REF_X;
+ float m_0_1 = space->space.XYZtoRGBf[1] * D50_WHITE_REF_Y;
+ float m_0_2 = space->space.XYZtoRGBf[2] * D50_WHITE_REF_Z;
+ float m_1_0 = space->space.XYZtoRGBf[3] * D50_WHITE_REF_X;
+ float m_1_1 = space->space.XYZtoRGBf[4] * D50_WHITE_REF_Y;
+ float m_1_2 = space->space.XYZtoRGBf[5] * D50_WHITE_REF_Z;
+ float m_2_0 = space->space.XYZtoRGBf[6] * D50_WHITE_REF_X;
+ float m_2_1 = space->space.XYZtoRGBf[7] * D50_WHITE_REF_Y;
+ float m_2_2 = space->space.XYZtoRGBf[8] * D50_WHITE_REF_Z;
+ long n = samples;
+
+ while (n--)
+ {
+ float X, Z, r, g, b;
+ float x = src[0];
+ float y = src[1];
+ float Y = src[2];
+
+
+ if ( Y < NEAR_ZERO )
+ {
+ X = 0.0f;
+ Y = 0.0f;
+ Z = 0.0f;
+ }
+ else
+ {
+ X = (x * Y) / y;
+ Y = Y;
+ Z = ((1 - x - y) * Y) / y;
+ }
+
+ r = m_0_0 * X + m_0_1 * Y + m_0_2 * Z;
+ g = m_1_0 * X + m_1_1 * Y + m_1_2 * Z;
+ b = m_2_0 * X + m_2_1 * Y + m_2_2 * Z;
+
+ dst[0] = r;
+ dst[1] = g;
+ dst[2] = b;
+ dst[3] = 1.0f;
+
+ src += 4;
+ dst += 4;
+ }
+}
+
+static void
+xyYaf_to_rgbaf (const Babl *conversion,
+ float *src,
+ float *dst,
+ long samples)
+{
+ const Babl *space = babl_conversion_get_source_space (conversion);
+ float m_0_0 = space->space.XYZtoRGBf[0] * D50_WHITE_REF_X;
+ float m_0_1 = space->space.XYZtoRGBf[1] * D50_WHITE_REF_Y;
+ float m_0_2 = space->space.XYZtoRGBf[2] * D50_WHITE_REF_Z;
+ float m_1_0 = space->space.XYZtoRGBf[3] * D50_WHITE_REF_X;
+ float m_1_1 = space->space.XYZtoRGBf[4] * D50_WHITE_REF_Y;
+ float m_1_2 = space->space.XYZtoRGBf[5] * D50_WHITE_REF_Z;
+ float m_2_0 = space->space.XYZtoRGBf[6] * D50_WHITE_REF_X;
+ float m_2_1 = space->space.XYZtoRGBf[7] * D50_WHITE_REF_Y;
+ float m_2_2 = space->space.XYZtoRGBf[8] * D50_WHITE_REF_Z;
+ long n = samples;
+
+ while (n--)
+ {
+ float X, Z, r, g, b;
+ float x = src[0];
+ float y = src[1];
+ float Y = src[2];
+ float a = src[3];
+
+
+ if ( Y < NEAR_ZERO )
+ {
+ X = 0.0f;
+ Y = 0.0f;
+ Z = 0.0f;
+ }
+ else
+ {
+ X = (x * Y) / y;
+ Y = Y;
+ Z = ((1 - x - y) * Y) / y;
+ }
+
+ r = m_0_0 * X + m_0_1 * Y + m_0_2 * Z;
+ g = m_1_0 * X + m_1_1 * Y + m_1_2 * Z;
+ b = m_2_0 * X + m_2_1 * Y + m_2_2 * Z;
+
+ dst[0] = r;
+ dst[1] = g;
+ dst[2] = b;
+ dst[3] = a;
+
+ src += 4;
+ dst += 4;
+ }
+}
+
+
+/* rgb <-> LAB */
+
static void
rgba_to_lab (const Babl *conversion,char *src,
char *dst,
@@ -305,7 +829,6 @@ rgba_to_lab (const Babl *conversion,char *src,
}
-
static void
lab_to_rgba (const Babl *conversion,char *src,
char *dst,
@@ -400,6 +923,9 @@ laba_to_rgba (const Babl *conversion,char *src,
}
}
+
+/* rgb <-> LCh */
+
static inline void
CHab_to_ab (double C,
double H,
@@ -1426,6 +1952,8 @@ rgbaf_to_Labaf_sse2 (const Babl *conversion, const float *src, float *dst, long
static void
conversions (void)
{
+ /* babl_model */
+
babl_conversion_new (
babl_model ("RGBA"),
babl_model ("CIE Lab"),
@@ -1444,28 +1972,91 @@ conversions (void)
"linear", rgba_to_laba,
NULL
);
- babl_conversion_new (
+ babl_conversion_new (
babl_model ("CIE Lab alpha"),
babl_model ("RGBA"),
"linear", laba_to_rgba,
NULL
);
babl_conversion_new (
- babl_format ("RGB float"),
- babl_format ("CIE Lab float"),
- "linear", rgbf_to_Labf,
+ babl_model ("RGBA"),
+ babl_model ("CIE LCH(ab)"),
+ "linear", rgba_to_lchab,
NULL
);
babl_conversion_new (
- babl_format ("CIE Lab float"),
- babl_format ("RGB float"),
- "linear", Labf_to_rgbf,
+ babl_model ("CIE LCH(ab)"),
+ babl_model ("RGBA"),
+ "linear", lchab_to_rgba,
+ NULL
+ );
+ babl_conversion_new (
+ babl_model ("RGBA"),
+ babl_model ("CIE LCH(ab) alpha"),
+ "linear", rgba_to_lchaba,
+ NULL
+ );
+ babl_conversion_new (
+ babl_model ("CIE LCH(ab) alpha"),
+ babl_model ("RGBA"),
+ "linear", lchaba_to_rgba,
+ NULL
+ );
+ babl_conversion_new (
+ babl_model ("RGBA"),
+ babl_model ("CIE XYZ"),
+ "linear", rgba_to_xyz,
+ NULL
+ );
+ babl_conversion_new (
+ babl_model ("CIE XYZ"),
+ babl_model ("RGBA"),
+ "linear", xyz_to_rgba,
+ NULL
+ );
+ babl_conversion_new (
+ babl_model ("RGBA"),
+ babl_model ("CIE XYZ alpha"),
+ "linear", rgba_to_xyza,
+ NULL
+ );
+ babl_conversion_new (
+ babl_model ("CIE XYZ alpha"),
+ babl_model ("RGBA"),
+ "linear", xyza_to_rgba,
+ NULL
+ );
+ babl_conversion_new (
+ babl_model ("RGBA"),
+ babl_model ("CIE xyY"),
+ "linear", rgba_to_xyY,
+ NULL
+ );
+ babl_conversion_new (
+ babl_model ("CIE xyY"),
+ babl_model ("RGBA"),
+ "linear", xyY_to_rgba,
+ NULL
+ );
+ babl_conversion_new (
+ babl_model ("RGBA"),
+ babl_model ("CIE xyY alpha"),
+ "linear", rgba_to_xyYa,
+ NULL
+ );
+ babl_conversion_new (
+ babl_model ("CIE xyY alpha"),
+ babl_model ("RGBA"),
+ "linear", xyYa_to_rgba,
NULL
);
+
+ /* babl_format */
+
babl_conversion_new (
+ babl_format ("RGB float"),
babl_format ("CIE Lab float"),
- babl_format ("RGBA float"),
- "linear", Labf_to_rgbaf,
+ "linear", rgbf_to_Labf,
NULL
);
babl_conversion_new (
@@ -1480,6 +2071,18 @@ conversions (void)
"linear", rgbaf_to_Labaf,
NULL
);
+ babl_conversion_new (
+ babl_format ("CIE Lab float"),
+ babl_format ("RGB float"),
+ "linear", Labf_to_rgbf,
+ NULL
+ );
+ babl_conversion_new (
+ babl_format ("CIE Lab float"),
+ babl_format ("RGBA float"),
+ "linear", Labf_to_rgbaf,
+ NULL
+ );
babl_conversion_new (
babl_format ("CIE Lab alpha float"),
babl_format ("RGBA float"),
@@ -1522,30 +2125,6 @@ conversions (void)
"linear", Labaf_to_Lf,
NULL
);
- babl_conversion_new (
- babl_model ("RGBA"),
- babl_model ("CIE LCH(ab)"),
- "linear", rgba_to_lchab,
- NULL
- );
- babl_conversion_new (
- babl_model ("CIE LCH(ab)"),
- babl_model ("RGBA"),
- "linear", lchab_to_rgba,
- NULL
- );
- babl_conversion_new (
- babl_model ("RGBA"),
- babl_model ("CIE LCH(ab) alpha"),
- "linear", rgba_to_lchaba,
- NULL
- );
- babl_conversion_new (
- babl_model ("CIE LCH(ab) alpha"),
- babl_model ("RGBA"),
- "linear", lchaba_to_rgba,
- NULL
- );
babl_conversion_new (
babl_format ("CIE Lab float"),
babl_format ("CIE LCH(ab) float"),
@@ -1571,27 +2150,39 @@ conversions (void)
NULL
);
babl_conversion_new (
- babl_model ("RGBA"),
- babl_model ("CIE XYZ"),
- "linear", rgba_to_xyz,
+ babl_format ("RGB float"),
+ babl_format ("CIE xyY float"),
+ "linear", rgbf_to_xyYf,
NULL
);
babl_conversion_new (
- babl_model ("CIE XYZ"),
- babl_model ("RGBA"),
- "linear", xyz_to_rgba,
+ babl_format ("CIE xyY float"),
+ babl_format ("RGB float"),
+ "linear", xyYf_to_rgbf,
NULL
);
babl_conversion_new (
- babl_model ("RGBA"),
- babl_model ("CIE XYZ alpha"),
- "linear", rgba_to_xyza,
+ babl_format ("RGBA float"),
+ babl_format ("CIE xyY float"),
+ "linear", rgbaf_to_xyYf,
NULL
);
babl_conversion_new (
- babl_model ("CIE XYZ alpha"),
- babl_model ("RGBA"),
- "linear", xyza_to_rgba,
+ babl_format ("CIE xyY float"),
+ babl_format ("RGBA float"),
+ "linear", xyYf_to_rgbaf,
+ NULL
+ );
+ babl_conversion_new (
+ babl_format ("RGBA float"),
+ babl_format ("CIE xyY alpha float"),
+ "linear", rgbaf_to_xyYaf,
+ NULL
+ );
+ babl_conversion_new (
+ babl_format ("CIE xyY alpha float"),
+ babl_format ("RGBA float"),
+ "linear", xyYaf_to_rgbaf,
NULL
);
@@ -1675,6 +2266,27 @@ formats (void)
babl_component ("A"),
NULL);
+ babl_format_new (
+ "name", "CIE LCH(ab) float",
+ babl_model ("CIE LCH(ab)"),
+
+ babl_type ("float"),
+ babl_component ("CIE L"),
+ babl_component ("CIE C(ab)"),
+ babl_component ("CIE H(ab)"),
+ NULL);
+
+ babl_format_new (
+ "name", "CIE LCH(ab) alpha float",
+ babl_model ("CIE LCH(ab) alpha"),
+
+ babl_type ("float"),
+ babl_component ("CIE L"),
+ babl_component ("CIE C(ab)"),
+ babl_component ("CIE H(ab)"),
+ babl_component ("A"),
+ NULL);
+
babl_format_new (
"name", "CIE L float",
babl_model ("CIE Lab"),
@@ -1715,23 +2327,23 @@ formats (void)
NULL);
babl_format_new (
- "name", "CIE LCH(ab) float",
- babl_model ("CIE LCH(ab)"),
+ "name", "CIE xyY float",
+ babl_model ("CIE xyY"),
babl_type ("float"),
- babl_component ("CIE L"),
- babl_component ("CIE C(ab)"),
- babl_component ("CIE H(ab)"),
+ babl_component ("CIE x"),
+ babl_component ("CIE y"),
+ babl_component ("CIE Y"),
NULL);
babl_format_new (
- "name", "CIE LCH(ab) alpha float",
- babl_model ("CIE LCH(ab) alpha"),
+ "name", "CIE xyY alpha float",
+ babl_model ("CIE xyY alpha"),
babl_type ("float"),
- babl_component ("CIE L"),
- babl_component ("CIE C(ab)"),
- babl_component ("CIE H(ab)"),
+ babl_component ("CIE x"),
+ babl_component ("CIE y"),
+ babl_component ("CIE Y"),
babl_component ("A"),
NULL);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]