[gimp] app: make compositing of hsv value blend mode consistent



commit 7959141eb47ad2ae86ec76f9bac5d03ebbcc9296
Author: Øyvind Kolås <pippin gimp org>
Date:   Fri Jan 13 14:26:36 2017 +0100

    app: make compositing of hsv value blend mode consistent

 app/operations/layer-modes/gimpoperationhsvvalue.c |   31 +++++--------------
 1 files changed, 8 insertions(+), 23 deletions(-)
---
diff --git a/app/operations/layer-modes/gimpoperationhsvvalue.c 
b/app/operations/layer-modes/gimpoperationhsvvalue.c
index be4a35d..4d1c2c3 100644
--- a/app/operations/layer-modes/gimpoperationhsvvalue.c
+++ b/app/operations/layer-modes/gimpoperationhsvvalue.c
@@ -101,43 +101,28 @@ gimp_operation_hsv_value_process_pixels (gfloat              *in,
       GimpHSV layer_hsv, out_hsv;
       GimpRGB layer_rgb = {layer[0], layer[1], layer[2]};
       GimpRGB out_rgb   = {in[0], in[1], in[2]};
-      gfloat  comp_alpha, new_alpha;
+      gfloat  comp_alpha = layer[ALPHA] * opacity;
 
-      comp_alpha = MIN (in[ALPHA], layer[ALPHA]) * opacity;
       if (has_mask)
         comp_alpha *= *mask;
 
-      new_alpha = in[ALPHA] + (1.0 - in[ALPHA]) * comp_alpha;
-
-      if (comp_alpha && new_alpha)
+      if (comp_alpha != 0.0f)
         {
-          gint   b;
-          gfloat out_tmp[3];
-          gfloat ratio = comp_alpha / new_alpha;
-
           gimp_rgb_to_hsv (&layer_rgb, &layer_hsv);
           gimp_rgb_to_hsv (&out_rgb, &out_hsv);
 
           out_hsv.v = layer_hsv.v;
           gimp_hsv_to_rgb (&out_hsv, &out_rgb);
 
-          out_tmp[0] = out_rgb.r;
-          out_tmp[1] = out_rgb.g;
-          out_tmp[2] = out_rgb.b;
-
-          for (b = RED; b < ALPHA; b++)
-            {
-              out[b] = out_tmp[b] * ratio + in[b] * (1.0 - ratio);
-            }
+          out[RED]   = out_rgb.r * comp_alpha + in[RED]   * (1.0 - comp_alpha);
+          out[GREEN] = out_rgb.g * comp_alpha + in[GREEN] * (1.0 - comp_alpha);
+          out[BLUE]  = out_rgb.b * comp_alpha + in[BLUE]  * (1.0 - comp_alpha);
         }
       else
         {
-          gint b;
-
-          for (b = RED; b < ALPHA; b++)
-            {
-              out[b] = in[b];
-            }
+          out[RED]   = in[RED];
+          out[GREEN] = in[GREEN];
+          out[BLUE]  = in[BLUE];
         }
 
       out[ALPHA] = in[ALPHA];


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