[gimp] libgimpcolor: space invade gimp_color_profile_get_lcms_format()



commit 4ac4820a54678b8e2d019c704dec178cc330ad94
Author: Michael Natterer <mitch gimp org>
Date:   Tue May 28 00:33:20 2019 +0200

    libgimpcolor: space invade gimp_color_profile_get_lcms_format()
    
    The function was still returning formats without space, and was
    lacking support for perceptual '~' models.

 libgimpcolor/gimpcolorprofile.c | 69 +++++++++++++++++++++++++++++++----------
 1 file changed, 53 insertions(+), 16 deletions(-)
---
diff --git a/libgimpcolor/gimpcolorprofile.c b/libgimpcolor/gimpcolorprofile.c
index fd7cc74d8e..2b57b5c6db 100644
--- a/libgimpcolor/gimpcolorprofile.c
+++ b/libgimpcolor/gimpcolorprofile.c
@@ -1544,11 +1544,13 @@ gimp_color_profile_get_lcms_format (const Babl *format,
   const Babl *output_format = NULL;
   const Babl *type;
   const Babl *model;
+  const Babl *space;
   gboolean    has_alpha;
-  gboolean    rgb    = FALSE;
-  gboolean    gray   = FALSE;
-  gboolean    cmyk   = FALSE;
-  gboolean    linear = FALSE;
+  gboolean    rgb      = FALSE;
+  gboolean    gray     = FALSE;
+  gboolean    cmyk     = FALSE;
+  gboolean    linear   = FALSE;
+  gboolean    srgb_trc = FALSE;
 
   g_return_val_if_fail (format != NULL, NULL);
   g_return_val_if_fail (lcms_format != NULL, NULL);
@@ -1556,6 +1558,7 @@ gimp_color_profile_get_lcms_format (const Babl *format,
   has_alpha = babl_format_has_alpha (format);
   type      = babl_format_get_type (format, 0);
   model     = babl_format_get_model (format);
+  space     = babl_format_get_space (format);
 
   if (format == babl_format ("cairo-RGB24"))
     {
@@ -1578,6 +1581,13 @@ gimp_color_profile_get_lcms_format (const Babl *format,
       rgb    = TRUE;
       linear = TRUE;
     }
+  else if (model == babl_model ("R~G~B~")  ||
+           model == babl_model ("R~G~B~A") ||
+           model == babl_model ("R~aG~aB~aA"))
+    {
+      rgb      = TRUE;
+      srgb_trc = TRUE;
+    }
   else if (model == babl_model ("R'G'B'")  ||
            model == babl_model ("R'G'B'A") ||
            model == babl_model ("R'aG'aB'aA"))
@@ -1591,6 +1601,13 @@ gimp_color_profile_get_lcms_format (const Babl *format,
       gray   = TRUE;
       linear = TRUE;
     }
+  else if (model == babl_model ("Y~")  ||
+           model == babl_model ("Y~A") ||
+           model == babl_model ("Y~aA"))
+    {
+      gray     = TRUE;
+      srgb_trc = TRUE;
+    }
   else if (model == babl_model ("Y'")  ||
            model == babl_model ("Y'A") ||
            model == babl_model ("Y'aA"))
@@ -1614,13 +1631,13 @@ gimp_color_profile_get_lcms_format (const Babl *format,
         {
           *lcms_format = TYPE_RGBA_FLT;
 
-          return babl_format ("RGBA float");
+          return babl_format_with_space ("RGBA float", space);
         }
       else
         {
           *lcms_format = TYPE_RGB_FLT;
 
-          return babl_format ("RGB float");
+          return babl_format_with_space ("RGB float", space);
         }
     }
   else if (babl_format_is_palette (format))
@@ -1629,13 +1646,13 @@ gimp_color_profile_get_lcms_format (const Babl *format,
         {
           *lcms_format = TYPE_RGBA_8;
 
-          return babl_format ("R'G'B'A u8");
+          return babl_format_with_space ("R'G'B'A u8", space);
         }
       else
         {
           *lcms_format = TYPE_RGB_8;
 
-          return babl_format ("R'G'B' u8");
+          return babl_format_with_space ("R'G'B' u8", space);
         }
     }
   else
@@ -1663,18 +1680,28 @@ gimp_color_profile_get_lcms_format (const Babl *format,
                 *lcms_format = TYPE_RGBA_##lcms_t;                             \
                                                                                \
                 if (linear)                                                    \
-                  output_format = babl_format ("RGBA " babl_t);                \
+                  output_format = babl_format_with_space ("RGBA " babl_t,      \
+                                                          space);              \
+                else if (srgb_trc)                                             \
+                  output_format = babl_format_with_space ("R~G~B~A " babl_t,   \
+                                                          space);              \
                 else                                                           \
-                  output_format = babl_format ("R'G'B'A " babl_t);             \
+                  output_format = babl_format_with_space ("R'G'B'A " babl_t,   \
+                                                          space);              \
               }                                                                \
             else if (gray)                                                     \
               {                                                                \
                 *lcms_format = TYPE_GRAYA_##lcms_t;                            \
                                                                                \
                 if (linear)                                                    \
-                  output_format = babl_format ("YA " babl_t);                  \
+                  output_format = babl_format_with_space ("YA " babl_t,        \
+                                                          space);              \
+                else if (srgb_trc)                                             \
+                  output_format = babl_format_with_space ("Y~A " babl_t,       \
+                                                          space);              \
                 else                                                           \
-                  output_format = babl_format ("Y'A " babl_t);                 \
+                  output_format = babl_format_with_space ("Y'A " babl_t,       \
+                                                          space);              \
               }                                                                \
             else if (cmyk)                                                     \
               {                                                                \
@@ -1690,18 +1717,28 @@ gimp_color_profile_get_lcms_format (const Babl *format,
                 *lcms_format = TYPE_RGB_##lcms_t;                              \
                                                                                \
                 if (linear)                                                    \
-                  output_format = babl_format ("RGB " babl_t);                 \
+                  output_format = babl_format_with_space ("RGB " babl_t,       \
+                                                          space);              \
+                else if (srgb_trc)                                             \
+                  output_format = babl_format_with_space ("R~G~B~ " babl_t,    \
+                                                          space);              \
                 else                                                           \
-                  output_format = babl_format ("R'G'B' " babl_t);              \
+                  output_format = babl_format_with_space ("R'G'B' " babl_t,    \
+                                                          space);              \
               }                                                                \
             else if (gray)                                                     \
               {                                                                \
                 *lcms_format = TYPE_GRAY_##lcms_t;                             \
                                                                                \
                 if (linear)                                                    \
-                  output_format = babl_format ("Y " babl_t);                   \
+                  output_format = babl_format_with_space ("Y " babl_t,         \
+                                                          space);              \
+                else if (srgb_trc)                                             \
+                  output_format = babl_format_with_space ("Y~ " babl_t,        \
+                                                          space);              \
                 else                                                           \
-                  output_format = babl_format ("Y' " babl_t);                  \
+                  output_format = babl_format_with_space ("Y' " babl_t,        \
+                                                          space);              \
               }                                                                \
             else if (cmyk)                                                     \
               {                                                                \


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]