[gimp] Desaturate to Luminance using AnyRGB



commit 762fd66d28815fe2fcf2771075012aca0e7d69df
Author: Elle Stone <ellestone ninedegreesbelow com>
Date:   Fri May 31 19:05:45 2019 -0400

    Desaturate to Luminance using AnyRGB
    
    Issue #3436 Replace sRGB Y values with Y values from XYZ for the
    image's actual RGB space
    
    This patch is for Colors/Desaturate/Desaturate to Luminance or
    Luma.

 app/operations/gimpoperationdesaturate.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
---
diff --git a/app/operations/gimpoperationdesaturate.c b/app/operations/gimpoperationdesaturate.c
index 9f833db18b..e7cc2d2e5a 100644
--- a/app/operations/gimpoperationdesaturate.c
+++ b/app/operations/gimpoperationdesaturate.c
@@ -167,8 +167,12 @@ gimp_operation_desaturate_process (GeglOperation       *operation,
                                    gint                 level)
 {
   GimpOperationDesaturate *desaturate = GIMP_OPERATION_DESATURATE (operation);
+  
   gfloat                  *src        = in_buf;
   gfloat                  *dest       = out_buf;
+  double red_luminance, green_luminance, blue_luminance;
+  const Babl *space = gegl_operation_get_source_space (operation, "input");
+  babl_space_get_rgb_luminance (space, &red_luminance, &green_luminance, &blue_luminance);
 
   switch (desaturate->mode)
     {
@@ -201,8 +205,9 @@ gimp_operation_desaturate_process (GeglOperation       *operation,
     case GIMP_DESATURATE_LUMINANCE:
       while (samples--)
         {
-          gfloat value = GIMP_RGB_LUMINANCE (src[0], src[1], src[2]);
-
+          gfloat value  = (src[0] * red_luminance) +
+                          (src[1] * green_luminance) +
+                          (src[2] * blue_luminance);
           dest[0] = value;
           dest[1] = value;
           dest[2] = value;


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