static void normalize (GimpDrawable *drawable) { NormalizeParam_t param; gint x; guchar range; param.min = 255; param.max = 0; param.has_alpha = gimp_drawable_has_alpha (drawable->drawable_id); param.alpha = (param.has_alpha) ? drawable->bpp - 1 : drawable->bpp; gimp_rgn_iterate1 (drawable, 0 /* unused */, find_min_max, ¶m); /* Calculate LUT */ range = param.max - param.min; if (range != 0) for (x = param.min; x <= param.max; x++) param.lut[x] = 255 * (x - param.min) / range; else param.lut[(gint)param.min] = param.min; gimp_rgn_iterate2 (drawable, 0 /* unused */, normalize_func, ¶m); }
static void autostretch_hsv (GimpDrawable *drawable) { AutostretchData data = {0.0, 1.0, 0.0, 1.0}; gimp_rgn_iterate1 (drawable, 0 /* unused */, (GimpRgnFunc1) find_max, &data); gimp_rgn_iterate2 (drawable, 0 /* unused */, (GimpRgnFunc2) autostretch_hsv_func, &data); }