static void gimp_histogram_editor_set_image (GimpImageEditor *image_editor, GimpImage *image) { GimpHistogramEditor *editor = GIMP_HISTOGRAM_EDITOR (image_editor); GimpHistogramView *view = GIMP_HISTOGRAM_BOX (editor->box)->view; if (image_editor->image) { if (editor->idle_id) { g_source_remove (editor->idle_id); editor->idle_id = 0; } g_signal_handlers_disconnect_by_func (image_editor->image, gimp_histogram_editor_layer_changed, editor); g_signal_handlers_disconnect_by_func (image_editor->image, gimp_histogram_editor_menu_update, editor); if (editor->histogram) { gimp_histogram_unref (editor->histogram); editor->histogram = NULL; gimp_histogram_view_set_histogram (view, NULL); } if (editor->bg_histogram) { gimp_histogram_unref (editor->bg_histogram); editor->bg_histogram = NULL; gimp_histogram_view_set_background (view, NULL); } } GIMP_IMAGE_EDITOR_CLASS (parent_class)->set_image (image_editor, image); if (image) { editor->histogram = gimp_histogram_new (); gimp_histogram_view_set_histogram (view, editor->histogram); g_signal_connect_object (image, "mode-changed", G_CALLBACK (gimp_histogram_editor_menu_update), editor, G_CONNECT_SWAPPED); g_signal_connect_object (image, "active-layer-changed", G_CALLBACK (gimp_histogram_editor_layer_changed), editor, 0); g_signal_connect_object (image, "mask-changed", G_CALLBACK (gimp_histogram_editor_update), editor, G_CONNECT_SWAPPED); } gimp_histogram_editor_layer_changed (image, editor); }
static void gimp_levels_tool_init (GimpLevelsTool *tool) { GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool); tool->lut = gimp_lut_new (); tool->histogram = gimp_histogram_new (); tool->active_picker = NULL; im_tool->apply_func = (GimpImageMapApplyFunc) gimp_lut_process; im_tool->apply_data = tool->lut; }
static gboolean gimp_levels_tool_initialize (GimpTool *tool, GimpDisplay *display, GError **error) { GimpLevelsTool *l_tool = GIMP_LEVELS_TOOL (tool); GimpDrawable *drawable = gimp_image_get_active_drawable (display->image); if (! drawable) return FALSE; if (gimp_drawable_is_indexed (drawable)) { g_set_error (error, 0, 0, _("Levels does not operate on indexed layers.")); return FALSE; } if (! l_tool->hist) l_tool->hist = gimp_histogram_new (); levels_init (l_tool->levels); l_tool->channel = GIMP_HISTOGRAM_VALUE; l_tool->color = gimp_drawable_is_rgb (drawable); l_tool->alpha = gimp_drawable_has_alpha (drawable); if (l_tool->active_picker) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (l_tool->active_picker), FALSE); GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error); gimp_int_combo_box_set_sensitivity (GIMP_INT_COMBO_BOX (l_tool->channel_menu), levels_menu_sensitivity, l_tool, NULL); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (l_tool->channel_menu), l_tool->channel); /* FIXME: hack */ if (! l_tool->color) l_tool->channel = (l_tool->channel == GIMP_HISTOGRAM_ALPHA) ? 1 : 0; levels_update (l_tool, ALL); gimp_drawable_calculate_histogram (drawable, l_tool->hist); gimp_histogram_view_set_histogram (GIMP_HISTOGRAM_VIEW (l_tool->hist_view), l_tool->hist); return TRUE; }
/** * gimp_histogram_duplicate: * @histogram: a %GimpHistogram * * Creates a duplicate of @histogram. The duplicate has a reference * count of 1 and contains the values from @histogram. * * Return value: a newly allocated %GimpHistogram **/ GimpHistogram * gimp_histogram_duplicate (GimpHistogram *histogram) { GimpHistogram *dup; g_return_val_if_fail (histogram != NULL, NULL); dup = gimp_histogram_new (); dup->n_channels = histogram->n_channels; dup->values = g_memdup (histogram->values, sizeof (gdouble) * dup->n_channels * 256); return dup; }
void gimp_drawable_equalize (GimpDrawable *drawable, gboolean mask_only) { GimpHistogram *hist; GimpLut *lut; g_return_if_fail (GIMP_IS_DRAWABLE (drawable)); g_return_if_fail (gimp_item_is_attached (GIMP_ITEM (drawable))); hist = gimp_histogram_new (); gimp_drawable_calculate_histogram (drawable, hist); lut = equalize_lut_new (hist, gimp_drawable_bytes (drawable)); gimp_histogram_unref (hist); gimp_drawable_process_lut (drawable, NULL, _("Equalize"), lut); gimp_lut_free (lut); }
static gboolean gimp_curves_tool_initialize (GimpTool *tool, GimpDisplay *display, GError **error) { GimpCurvesTool *c_tool = GIMP_CURVES_TOOL (tool); GimpImage *image = gimp_display_get_image (display); GimpDrawable *drawable = gimp_image_get_active_drawable (image); GimpHistogram *histogram; if (! GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error)) { return FALSE; } /* always pick colors */ gimp_color_tool_enable (GIMP_COLOR_TOOL (tool), GIMP_COLOR_TOOL_GET_OPTIONS (tool)); gimp_int_combo_box_set_sensitivity (GIMP_INT_COMBO_BOX (c_tool->channel_menu), curves_menu_sensitivity, drawable, NULL); histogram = gimp_histogram_new (TRUE); gimp_drawable_calculate_histogram (drawable, histogram); gimp_histogram_view_set_background (GIMP_HISTOGRAM_VIEW (c_tool->graph), histogram); g_object_unref (histogram); if (gimp_drawable_get_precision (drawable) == GIMP_PRECISION_U8) { gimp_curve_view_set_range_x (GIMP_CURVE_VIEW (c_tool->graph), 0, 255); gimp_curve_view_set_range_y (GIMP_CURVE_VIEW (c_tool->graph), 0, 255); } else { gimp_curve_view_set_range_x (GIMP_CURVE_VIEW (c_tool->graph), 0.0, 1.0); gimp_curve_view_set_range_y (GIMP_CURVE_VIEW (c_tool->graph), 0.0, 1.0); } return TRUE; }
static gboolean gimp_curves_tool_initialize (GimpTool *tool, GimpDisplay *display, GError **error) { GimpCurvesTool *c_tool = GIMP_CURVES_TOOL (tool); GimpDrawable *drawable = gimp_image_get_active_drawable (display->image); GimpHistogram *histogram; if (! drawable) return FALSE; if (gimp_drawable_is_indexed (drawable)) { g_set_error (error, 0, 0, _("Curves does not operate on indexed layers.")); return FALSE; } gimp_config_reset (GIMP_CONFIG (c_tool->config)); GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error); /* always pick colors */ gimp_color_tool_enable (GIMP_COLOR_TOOL (tool), GIMP_COLOR_TOOL_GET_OPTIONS (tool)); gimp_int_combo_box_set_sensitivity (GIMP_INT_COMBO_BOX (c_tool->channel_menu), curves_menu_sensitivity, drawable, NULL); histogram = gimp_histogram_new (); gimp_drawable_calculate_histogram (drawable, histogram); gimp_histogram_view_set_background (GIMP_HISTOGRAM_VIEW (c_tool->graph), histogram); gimp_histogram_unref (histogram); return TRUE; }
static void gimp_levels_tool_init (GimpLevelsTool *tool) { tool->histogram = gimp_histogram_new (TRUE); }
static void gimp_threshold_tool_init (GimpThresholdTool *t_tool) { t_tool->histogram = gimp_histogram_new (); }