From d4ff99217b0dac44abdaa2ff733eca1ca6212dcf Mon Sep 17 00:00:00 2001 From: Helvetix Victorinox Date: Tue, 25 Nov 2003 04:51:31 +0000 Subject: [PATCH] Repaired an oversight on the application of hue/color/saturation/value on * app/composite/gimp-composite-generic.c: Repaired an oversight on the application of hue/color/saturation/value on non-rgb images. Fixes bug #127669 --- ChangeLog | 6 + app/composite/gimp-composite-generic.c | 221 +++++++++++++------------ 2 files changed, 125 insertions(+), 102 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4cd5680bd3..5d4361b800 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2003-11-24 Helvetix Victorinox + + * app/composite/gimp-composite-generic.c: Repaired an oversight on + the application of hue/color/saturation/value on non-rgb images. + Fixes bug #127669 + 2003-11-24 Sven Neumann * configure.in: (hopefully) fixed the check for the symbol prefix. diff --git a/app/composite/gimp-composite-generic.c b/app/composite/gimp-composite-generic.c index c6e9d4c056..fc41da47ac 100644 --- a/app/composite/gimp-composite-generic.c +++ b/app/composite/gimp-composite-generic.c @@ -377,36 +377,40 @@ gimp_composite_hue_any_any_any_generic (GimpCompositeContext * ctx) guint r1, g1, b1; guint r2, g2, b2; - /* assumes inputs are only 4 byte RGBA pixels */ - while (length--) - { - r1 = src1[0]; - g1 = src1[1]; - b1 = src1[2]; - r2 = src2[0]; - g2 = src2[1]; - b2 = src2[2]; - gimp_rgb_to_hsv_int(&r1, &g1, &b1); - gimp_rgb_to_hsv_int(&r2, &g2, &b2); + if (bytes1 > 2) { + /* assumes inputs are only 4 byte RGBA pixels */ + while (length--) + { + r1 = src1[0]; + g1 = src1[1]; + b1 = src1[2]; + r2 = src2[0]; + g2 = src2[1]; + b2 = src2[2]; + gimp_rgb_to_hsv_int(&r1, &g1, &b1); + gimp_rgb_to_hsv_int(&r2, &g2, &b2); - r1 = r2; + r1 = r2; - /* set the destination */ - gimp_hsv_to_rgb_int(&r1, &g1, &b1); + /* set the destination */ + gimp_hsv_to_rgb_int(&r1, &g1, &b1); - dest[0] = r1; - dest[1] = g1; - dest[2] = b1; + dest[0] = r1; + dest[1] = g1; + dest[2] = b1; - if (has_alpha1 && has_alpha2) - dest[3] = MIN(src1[3], src2[3]); - else if (has_alpha2) - dest[3] = src2[3]; + if (has_alpha1 && has_alpha2) + dest[3] = MIN(src1[3], src2[3]); + else if (has_alpha2) + dest[3] = src2[3]; - src1 += bytes1; - src2 += bytes2; - dest += bytes2; - } + src1 += bytes1; + src2 += bytes2; + dest += bytes2; + } + } else { + ctx->D = ctx->B; + } } @@ -432,36 +436,40 @@ gimp_composite_saturation_any_any_any_generic (GimpCompositeContext * ctx) guint r1, g1, b1; guint r2, g2, b2; - /* assumes inputs are only 4 byte RGBA pixels */ - while (length--) - { - r1 = src1[0]; - g1 = src1[1]; - b1 = src1[2]; - r2 = src2[0]; - g2 = src2[1]; - b2 = src2[2]; - gimp_rgb_to_hsv_int(&r1, &g1, &b1); - gimp_rgb_to_hsv_int(&r2, &g2, &b2); + if (bytes1 > 2) { + /* assumes inputs are only 4 byte RGBA pixels */ + while (length--) + { + r1 = src1[0]; + g1 = src1[1]; + b1 = src1[2]; + r2 = src2[0]; + g2 = src2[1]; + b2 = src2[2]; + gimp_rgb_to_hsv_int(&r1, &g1, &b1); + gimp_rgb_to_hsv_int(&r2, &g2, &b2); - g1 = g2; + g1 = g2; - /* set the destination */ - gimp_hsv_to_rgb_int(&r1, &g1, &b1); + /* set the destination */ + gimp_hsv_to_rgb_int(&r1, &g1, &b1); - dest[0] = r1; - dest[1] = g1; - dest[2] = b1; + dest[0] = r1; + dest[1] = g1; + dest[2] = b1; - if (has_alpha1 && has_alpha2) - dest[3] = MIN(src1[3], src2[3]); - else if (has_alpha2) - dest[3] = src2[3]; + if (has_alpha1 && has_alpha2) + dest[3] = MIN(src1[3], src2[3]); + else if (has_alpha2) + dest[3] = src2[3]; - src1 += bytes1; - src2 += bytes2; - dest += bytes2; - } + src1 += bytes1; + src2 += bytes2; + dest += bytes2; + } + } else { + ctx->D = ctx->B; + } } @@ -487,36 +495,41 @@ gimp_composite_value_any_any_any_generic (GimpCompositeContext * ctx) guint r1, g1, b1; guint r2, g2, b2; - /* assumes inputs are only 4 byte RGBA pixels */ - while (length--) - { - r1 = src1[0]; - g1 = src1[1]; - b1 = src1[2]; - r2 = src2[0]; - g2 = src2[1]; - b2 = src2[2]; - gimp_rgb_to_hsv_int(&r1, &g1, &b1); - gimp_rgb_to_hsv_int(&r2, &g2, &b2); + if (bytes1 > 2) { + /* assumes inputs are only 4 byte RGBA pixels */ + /* assumes inputs are only 4 byte RGBA pixels */ + while (length--) + { + r1 = src1[0]; + g1 = src1[1]; + b1 = src1[2]; + r2 = src2[0]; + g2 = src2[1]; + b2 = src2[2]; + gimp_rgb_to_hsv_int(&r1, &g1, &b1); + gimp_rgb_to_hsv_int(&r2, &g2, &b2); - b1 = b2; + b1 = b2; - /* set the destination */ - gimp_hsv_to_rgb_int(&r1, &g1, &b1); + /* set the destination */ + gimp_hsv_to_rgb_int(&r1, &g1, &b1); - dest[0] = r1; - dest[1] = g1; - dest[2] = b1; + dest[0] = r1; + dest[1] = g1; + dest[2] = b1; - if (has_alpha1 && has_alpha2) - dest[3] = MIN(src1[3], src2[3]); - else if (has_alpha2) - dest[3] = src2[3]; + if (has_alpha1 && has_alpha2) + dest[3] = MIN(src1[3], src2[3]); + else if (has_alpha2) + dest[3] = src2[3]; - src1 += bytes1; - src2 += bytes2; - dest += bytes2; - } + src1 += bytes1; + src2 += bytes2; + dest += bytes2; + } + } else { + ctx->D = ctx->B; + } } @@ -542,38 +555,42 @@ gimp_composite_color_only_any_any_any_generic (GimpCompositeContext * ctx) guint r1, g1, b1; guint r2, g2, b2; - /* assumes inputs are only 4 byte RGBA pixels */ - while (length--) - { - r1 = src1[0]; - g1 = src1[1]; - b1 = src1[2]; - r2 = src2[0]; - g2 = src2[1]; - b2 = src2[2]; - gimp_rgb_to_hsl_int(&r1, &g1, &b1); - gimp_rgb_to_hsl_int(&r2, &g2, &b2); + if (bytes1 > 2) { + /* assumes inputs are only 4 byte RGBA pixels */ + while (length--) + { + r1 = src1[0]; + g1 = src1[1]; + b1 = src1[2]; + r2 = src2[0]; + g2 = src2[1]; + b2 = src2[2]; + gimp_rgb_to_hsl_int(&r1, &g1, &b1); + gimp_rgb_to_hsl_int(&r2, &g2, &b2); - /* transfer hue and saturation to the source pixel */ - r1 = r2; - g1 = g2; + /* transfer hue and saturation to the source pixel */ + r1 = r2; + g1 = g2; - /* set the destination */ - gimp_hsl_to_rgb_int(&r1, &g1, &b1); + /* set the destination */ + gimp_hsl_to_rgb_int(&r1, &g1, &b1); - dest[0] = r1; - dest[1] = g1; - dest[2] = b1; + dest[0] = r1; + dest[1] = g1; + dest[2] = b1; - if (has_alpha1 && has_alpha2) - dest[3] = MIN(src1[3], src2[3]); - else if (has_alpha2) - dest[3] = src2[3]; + if (has_alpha1 && has_alpha2) + dest[3] = MIN(src1[3], src2[3]); + else if (has_alpha2) + dest[3] = src2[3]; - src1 += bytes1; - src2 += bytes2; - dest += bytes2; - } + src1 += bytes1; + src2 += bytes2; + dest += bytes2; + } + } else { + ctx->D = ctx->B; + } } /**