Well, 1.2.x is for bugfixes to 1.2, so the question is whether its considered a bug. I'm inclined to consider it one, but I'm not really doing much in the way of maintaining the 1.2 branch. Yosh, Sven? Seth --- Tamito KAJIYAMA <kajiyama@xxxxxxxxxxxxxxxxxxxxxxxx> wrote: > Hi again, > > I've noticed that the new procedure gimp-levels-auto > I've added > does not yield exactly the same effect of the Auto > button in the > levels dialog. So, here is the revised patch to the > GIMP 1.2.1 > source tree. > > BTW, I'd like to know if the patch is likely to be > integrated > into the GIMP. If it is not, I'd need to write an > plug-in > instead of a patch to the GIMP itself, since a > plug-in is much > more useful from user's point of view. Could you > please tell > me the likelihood? > > Thanks, > > -- > KAJIYAMA, Tamito <kajiyama@xxxxxxxxxxxxxxxxxxxxxxxx> > > diff -ru gimp-1.2.1.orig/tools/pdbgen/pdb/color.pdb > gimp-1.2.1/tools/pdbgen/pdb/color.pdb > --- gimp-1.2.1.orig/tools/pdbgen/pdb/color.pdb Mon > Dec 25 01:40:47 2000 > +++ gimp-1.2.1/tools/pdbgen/pdb/color.pdb Thu Mar 22 > 10:33:29 2001 > @@ -175,6 +175,137 @@ > } > } > > +sub levels_auto { > + $blurb = 'Modifies intensity levels in the > specified drawable.'; > + > + $help = <<'HELP'; > +This tool automatically adjusts intensity levels in > the specified > +drawable. This tool is only valid on RGB color and > grayscale > +images. It will not operate on indexed drawables. > +HELP > + > + &std_pdb_misc; > + > + @inargs = ( > + &drawable_arg > + ); > + > + %invoke = ( > + vars => [ 'PixelRegion srcPR, destPR', 'int x1, > y1, x2, y2', > + 'GimpLut *lut', 'int i, j', > + 'int low_input[5]', > + 'int high_input[5]', > + 'int low_output[5]', > + 'int high_output[5]', > + 'double gamma[5]', > + 'int channel, channels[3], nchannels', > + 'GimpHistogram *hist', > + 'double count, new_count, percentage, > next_percentage'], > + code => <<'CODE' > +{ > + if (gimp_drawable_is_indexed (drawable)) > + success = FALSE; > + else > + { > + for (i = 0; i < 5; i++) > + { > + low_input[i] = 0; > + high_input[i] = 255; > + low_output[i] = 0; > + high_output[i] = 255; > + gamma[i] = 1.0; > + } > + > + hist = gimp_histogram_new (); > + gimp_histogram_calculate_drawable (hist, > drawable); > + > + if (gimp_drawable_is_rgb (drawable)) > + { > + nchannels = 3; > + channels[0] = RED_LUT; > + channels[1] = GREEN_LUT; > + channels[2] = BLUE_LUT; > + } > + else > + { > + nchannels = 1; > + channels[0] = GRAY_LUT; > + } > + for (j = 0; j < nchannels; j++) > + { > + channel = channels[j]; > + > + count = gimp_histogram_get_count (hist, 0, 255); > + > + if (count == 0.0) > + { > + low_input[channel] = 0; > + high_input[channel] = 0; > + } > + else > + { > + /* set the low input */ > + new_count = 0.0; > + for (i = 0; i < 255; i++) > + { > + new_count += gimp_histogram_get_value(hist, > channel, i); > + percentage = new_count / count; > + next_percentage = > + (new_count + gimp_histogram_get_value (hist, > channel, > + i + 1)) / count; > + if (fabs (percentage - 0.006) < > + fabs (next_percentage - 0.006)) > + { > + low_input[channel] = i + 1; > + break; > + } > + } > + /* set the high input */ > + new_count = 0.0; > + for (i = 255; i > 0; i--) > + { > + new_count += gimp_histogram_get_value(hist, > channel, i); > + percentage = new_count / count; > + next_percentage = > + (new_count + gimp_histogram_get_value (hist, > channel, > + i - 1)) / count; > + if (fabs (percentage - 0.006) < > + fabs (next_percentage - 0.006)) > + { > + high_input[channel] = i - 1; > + break; > + } > + } > + } > + } > + > + gimp_histogram_free (hist); > + > + /* setup the lut */ > + lut = levels_lut_new (gamma, low_input, > high_input, > + low_output, high_output, > + gimp_drawable_bytes (drawable)); > + > + /* The application should occur only within > selection bounds */ > + gimp_drawable_mask_bounds (drawable, &x1, > &y1, &x2, &y2); > + > + pixel_region_init (&srcPR, gimp_drawable_data > (drawable), > + x1, y1, (x2 - x1), (y2 - y1), FALSE); > + pixel_region_init (&destPR, > gimp_drawable_shadow (drawable), > + x1, y1, (x2 - x1), (y2 - y1), TRUE); > + > + pixel_regions_process_parallel ((p_func) > gimp_lut_process, lut, 2, > + &srcPR, &destPR); > + > + gimp_lut_free(lut); > + gimp_drawable_merge_shadow (drawable, TRUE); > + drawable_update (drawable, x1, y1, (x2 - x1), > (y2 - y1)); > + } > +} > +CODE > + ); > +} > + > sub posterize { > $blurb = 'Posterize the specified drawable.'; > > @@ -761,9 +892,9 @@ > ); > } > > -@headers = qw("gimpimage.h" "gimpdrawable.h" > "gimplut.h" "lut_funcs.h"); > +@headers = qw("gimpimage.h" "gimpdrawable.h" > "gimplut.h" "lut_funcs.h" "libgimp/gimpmath.h"); > > -@procs = qw(brightness_contrast levels posterize > desaturate equalize invert > +@procs = qw(brightness_contrast levels levels_auto > posterize desaturate equalize invert > curves_spline curves_explicit color_balance > histogram > === message truncated === __________________________________________________ Do You Yahoo!? Get email at your own domain with Yahoo! Mail. http://personal.mail.yahoo.com/