[babl] extensions/CIE: use RGB space functions for xyz
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] extensions/CIE: use RGB space functions for xyz
- Date: Wed, 30 Aug 2017 01:54:49 +0000 (UTC)
commit e12890613906736411e89710f67a5525dfa55d51
Author: Øyvind Kolås <pippin gimp org>
Date: Wed Aug 30 03:49:32 2017 +0200
extensions/CIE: use RGB space functions for xyz
extensions/CIE.c | 88 +++++++++++++++++++++++++----------------------------
1 files changed, 42 insertions(+), 46 deletions(-)
---
diff --git a/extensions/CIE.c b/extensions/CIE.c
index 57e6d68..0f3a4b8 100644
--- a/extensions/CIE.c
+++ b/extensions/CIE.c
@@ -154,48 +154,6 @@ static inline void LAB_to_XYZ (double L,
double *to_Z
);
-static inline void XYZ_to_RGB (double X,
- double Y,
- double Z,
- double *to_R,
- double *to_G,
- double *to_B);
-
-static inline void
-XYZ_to_RGB (double X,
- double Y,
- double Z,
- double *to_R,
- double *to_G,
- double *to_B)
-{
- double XYZtoRGB[3][3];
-
-/*
- * The variables below hard-code the inverse of
- * the D50-adapted sRGB RGB to XYZ matrix.
- *
- * In a properly ICC profile color-managed application,
- * this matrix is the inverse of the matrix
- * retrieved from the image's ICC profile's RGB colorants.
- *
- */
- XYZtoRGB[0][0]= 3.134274799724;
- XYZtoRGB[0][1]= -1.617275708956;
- XYZtoRGB[0][2]= -0.490724283042;
- XYZtoRGB[1][0]= -0.978795575994;
- XYZtoRGB[1][1]= 1.916161689117;
- XYZtoRGB[1][2]= 0.033453331711;
- XYZtoRGB[2][0]= 0.071976988401;
- XYZtoRGB[2][1]= -0.228984974402;
- XYZtoRGB[2][2]= 1.405718224383;
-
-/* Convert XYZ to RGB */
- *to_R = XYZtoRGB[0][0] * X + XYZtoRGB[0][1] * Y + XYZtoRGB[0][2] * Z;
- *to_G = XYZtoRGB[1][0] * X + XYZtoRGB[1][1] * Y + XYZtoRGB[1][2] * Z;
- *to_B = XYZtoRGB[2][0] * X + XYZtoRGB[2][1] * Y + XYZtoRGB[2][2] * Z;
-}
-
static inline void
XYZ_to_LAB (double X,
double Y,
@@ -292,6 +250,7 @@ lab_to_rgba (const Babl *conversion,char *src,
char *dst,
long n)
{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
while (n--)
{
double L = ((double *) src)[0];
@@ -304,7 +263,15 @@ lab_to_rgba (const Babl *conversion,char *src,
LAB_to_XYZ (L, a, b, &X, &Y, &Z);
//convert XYZ to RGB
- XYZ_to_RGB (X, Y, Z, &R, &G, &B);
+ {
+ 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;
@@ -352,6 +319,7 @@ laba_to_rgba (const Babl *conversion,char *src,
char *dst,
long n)
{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
while (n--)
{
double L = ((double *) src)[0];
@@ -365,7 +333,17 @@ laba_to_rgba (const Babl *conversion,char *src,
LAB_to_XYZ (L, a, b, &X, &Y, &Z);
//convert XYZ to RGB
- XYZ_to_RGB (X, Y, Z, &R, &G, &B);
+ //XYZ_to_RGB (X, Y, Z, &R, &G, &B);
+
+ {
+ 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;
@@ -440,6 +418,8 @@ lchab_to_rgba (const Babl *conversion,char *src,
char *dst,
long n)
{
+ const Babl *space = babl_conversion_get_source_space (conversion);
+
while (n--)
{
double L = ((double *) src)[0];
@@ -454,7 +434,15 @@ lchab_to_rgba (const Babl *conversion,char *src,
LAB_to_XYZ (L, a, b, &X, &Y, &Z);
//Convert XYZ to RGB
- XYZ_to_RGB (X, Y, Z, &R, &G, &B);
+ {
+ 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;
@@ -507,6 +495,7 @@ lchaba_to_rgba (const Babl *conversion,char *src,
char *dst,
long n)
{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
while (n--)
{
double L = ((double *) src)[0];
@@ -522,7 +511,14 @@ lchaba_to_rgba (const Babl *conversion,char *src,
LAB_to_XYZ (L, a, b, &X, &Y, &Z);
//Convert XYZ to RGB
- XYZ_to_RGB (X, Y, Z, &R, &G, &B);
+ {
+ 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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]