/** * gwy_tip_estimate_partial: * @tip: Tip data to be refined (allocated). * @surface: Surface data. * @threshold: Threshold for noise supression. * @use_edges: Whether use also edges of image. * @count: Where to store the number of places that produced refinements to. * @set_fraction: Function that sets fraction to output (or %NULL). * @set_message: Function that sets message to output (or %NULL). * * Performs partial blind estimation algorithm published by Villarrubia. This * function converts all fields into form requested by "morph_lib.c" library, * that is almost identical with original Villarubia's library. Note that the * threshold value must be chosen sufficently high value to supress small * fluctulations due to noise (that would lead to very sharp tip) but * sufficiently low value to put algorithm at work. A value similar to 1/10000 * of surface range can be good. Otherwise we recommend to start with zero * threshold and increase it slowly to observe changes and choose right value. * * Returns: Estimated tip. May return %NULL if aborted. **/ GwyDataField* gwy_tip_estimate_partial(GwyDataField *tip, GwyDataField *surface, gdouble threshold, gboolean use_edges, gint *count, GwySetFractionFunc set_fraction, GwySetMessageFunc set_message) { gint **ftip; gint **fsurface; gdouble tipmin, surfacemin, step; gint cnt; if (set_message && !set_message(N_("Converting fields"))) return NULL; tipmin = gwy_data_field_get_min(tip); surfacemin = gwy_data_field_get_min(surface); step = (gwy_data_field_get_max(surface)-surfacemin)/10000; ftip = i_datafield_to_field(tip, TRUE, tipmin, step); fsurface = i_datafield_to_field(surface, FALSE, surfacemin, step); if (set_message && !set_message(N_("Starting partial estimation"))) { _gwy_morph_lib_ifreematrix(ftip, tip->xres); _gwy_morph_lib_ifreematrix(fsurface, surface->xres); return NULL; } cnt = _gwy_morph_lib_itip_estimate0(fsurface, surface->yres, surface->xres, tip->yres, tip->xres, tip->yres/2, tip->xres/2, ftip, threshold/step, use_edges, set_fraction, set_message); if (cnt == -1 || (set_fraction && !set_fraction(0.0))) { _gwy_morph_lib_ifreematrix(ftip, tip->xres); _gwy_morph_lib_ifreematrix(fsurface, surface->xres); return NULL; } gwy_debug("Converting fields"); if (set_message) set_message(N_("Converting fields")); tip = i_field_to_datafield(ftip, tip, tipmin, step); gwy_data_field_add(tip, -gwy_data_field_get_min(tip)); _gwy_morph_lib_ifreematrix(ftip, tip->xres); _gwy_morph_lib_ifreematrix(fsurface, surface->xres); if (count) *count = cnt; return tip; }
void MidiControllerDisplay::midi_value_changed(int c, int v) { if (c != ctr) { return; } if (v >= 0) { set_sensitive(true); set_fraction(v / 127.0); } else { set_sensitive(false); } }