All pastes #291229 Raw Edit

Mine

public text v1 · immutable
#291229 ·published 2006-12-24 22:52 UTC
rendered paste body
Index: f-pixbuf-utils.c
===================================================================
RCS file: /cvs/gnome/f-spot/libfspot/f-pixbuf-utils.c,v
retrieving revision 1.10
diff -u -p -r1.10 f-pixbuf-utils.c
--- f-pixbuf-utils.c    21 Dec 2006 20:47:10 -0000      1.10
+++ f-pixbuf-utils.c    24 Dec 2006 22:52:06 -0000
@@ -372,6 +372,10 @@ f_pixbuf_remove_redeye (GdkPixbuf *src)
        int r, g, b;
        int channels = gdk_pixbuf_get_n_channels (src);

+       double RED_FACTOR = 0.5133333;
+       double GREEN_FACTOR = 1;
+       double BLUE_FACTOR = 0.1933333;
+       int threshold = -15;
        guchar *row = gdk_pixbuf_get_pixels (src);

        for (i = 0; i < height; i++) {
@@ -381,9 +385,14 @@ f_pixbuf_remove_redeye (GdkPixbuf *src)
                        r = *col;
                        g = *(col + 1);
                        b = *(col + 2);
-
-                       if ((r > (3 * g / 2) && r > (3 * b / 2)) || (g > r && b > r)) {
-                               memset(col, (r * 31 + g * 61 + b * 8) / 100, 3);
+
+                       int adjusted_red = r * RED_FACTOR;
+                       int adjusted_green = g * GREEN_FACTOR;
+                       int adjusted_blue = b * BLUE_FACTOR;
+                       if (adjusted_red >= adjusted_green - threshold
+                         && adjusted_red >= adjusted_blue - threshold)
+                       {
+                               memset(col, ((double)(adjusted_green + adjusted_blue)) / (2.0 * RED_FACTOR) , 3);
                        }

                        col += channels;