1
/* The GIMP -- an image manipulation program
1
/* GIMP - The GNU Image Manipulation Program
2
2
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
4
4
* This program is free software; you can redistribute it and/or modify
21
21
#include <string.h>
25
23
#include "libgimp/gimp.h"
26
24
#include "libgimp/gimpui.h"
28
26
#include "libgimp/stdplugins-intl.h"
29
#define PLUG_IN_PROC "plug-in-retinex"
30
#define PLUG_IN_BINARY "retinex"
31
31
#define MAX_RETINEX_SCALES 8
32
32
#define MIN_GAUSSIAN_SCALE 16
33
33
#define MAX_GAUSSIAN_SCALE 250
146
static GimpParamDef args[] =
144
static const GimpParamDef args[] =
148
{ GIMP_PDB_INT32, "run_mode", "Interactive, non-interactive" },
146
{ GIMP_PDB_INT32, "run-mode", "Interactive, non-interactive" },
149
147
{ GIMP_PDB_IMAGE, "image", "Input image (unused)" },
150
148
{ GIMP_PDB_DRAWABLE, "drawable", "Input drawable" },
151
149
{ GIMP_PDB_INT32, "scale", "Biggest scale value" },
152
150
{ GIMP_PDB_INT32, "nscales", "Number of scales" },
153
{ GIMP_PDB_INT32, "scales_mode", "Retinex distribution through scales" },
151
{ GIMP_PDB_INT32, "scales-mode", "Retinex distribution through scales" },
154
152
{ GIMP_PDB_FLOAT, "cvar", "Variance value" }
157
gimp_install_procedure ("plug_in_retinex",
158
"Retinex Image Enhancement Algorithm",
155
gimp_install_procedure (PLUG_IN_PROC,
156
N_("Enhance contrast using the Retinex method"),
159
157
"The Retinex Image Enhancement Algorithm is an "
160
158
"automatic image enhancement method that enhances "
161
159
"a digital image in terms of dynamic range "
217
215
case GIMP_RUN_INTERACTIVE:
218
216
/* Possibly retrieve data */
219
gimp_get_data ("plug_in_retinex", &rvals);
217
gimp_get_data (PLUG_IN_PROC, &rvals);
220
219
/* First acquire information with a dialog */
221
220
if (! retinex_dialog (drawable))
248
247
if ((status == GIMP_PDB_SUCCESS) &&
249
248
(gimp_drawable_is_rgb (drawable->drawable_id)))
251
gimp_progress_init (_("Retinex..."));
250
gimp_progress_init (_("Retinex"));
252
252
retinex (drawable, NULL);
253
gimp_progress_init (_("Retinex (4/4): updated..."));
255
254
if (run_mode != GIMP_RUN_NONINTERACTIVE)
256
255
gimp_displays_flush ();
259
258
if (run_mode == GIMP_RUN_INTERACTIVE)
260
gimp_set_data ("plug_in_retinex", &rvals, sizeof (RetinexParams));
259
gimp_set_data (PLUG_IN_PROC, &rvals, sizeof (RetinexParams));
285
284
GtkWidget *frame;
288
gimp_ui_init ("retinex", FALSE);
287
gimp_ui_init (PLUG_IN_BINARY, FALSE);
290
dialog = gimp_dialog_new (_("Retinex Image Enhancement"), "retinex",
289
dialog = gimp_dialog_new (_("Retinex Image Enhancement"), PLUG_IN_BINARY,
292
gimp_standard_help_func, "plug-in-retinex",
291
gimp_standard_help_func, PLUG_IN_PROC,
293
293
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
294
294
GTK_STOCK_OK, GTK_RESPONSE_OK,
298
gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
303
gimp_window_set_transient (GTK_WINDOW (dialog));
298
305
main_vbox = gtk_vbox_new (FALSE, 12);
299
306
gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
300
307
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), main_vbox);
301
308
gtk_widget_show (main_vbox);
303
preview = gimp_aspect_preview_new (drawable, &rvals.preview);
310
preview = gimp_zoom_preview_new (drawable);
304
311
gtk_box_pack_start_defaults (GTK_BOX (main_vbox), preview);
305
312
gtk_widget_show (preview);
348
355
scrollbar = GIMP_SCALE_ENTRY_SCALE (adj);
349
356
gtk_range_set_update_policy (GTK_RANGE (scrollbar), GTK_UPDATE_DISCONTINUOUS);
351
g_signal_connect (adj, "value_changed",
358
g_signal_connect (adj, "value-changed",
352
359
G_CALLBACK (gimp_int_adjustment_update),
354
g_signal_connect_swapped (adj, "value_changed",
361
g_signal_connect_swapped (adj, "value-changed",
355
362
G_CALLBACK (gimp_preview_invalidate),
363
370
scrollbar = GIMP_SCALE_ENTRY_SCALE (adj);
364
371
gtk_range_set_update_policy (GTK_RANGE (scrollbar), GTK_UPDATE_DISCONTINUOUS);
366
g_signal_connect (adj, "value_changed",
373
g_signal_connect (adj, "value-changed",
367
374
G_CALLBACK (gimp_int_adjustment_update),
369
g_signal_connect_swapped (adj, "value_changed",
376
g_signal_connect_swapped (adj, "value-changed",
370
377
G_CALLBACK (gimp_preview_invalidate),
377
384
scrollbar = GIMP_SCALE_ENTRY_SCALE (adj);
378
385
gtk_range_set_update_policy (GTK_RANGE (scrollbar), GTK_UPDATE_DISCONTINUOUS);
380
g_signal_connect (adj, "value_changed",
387
g_signal_connect (adj, "value-changed",
381
388
G_CALLBACK (gimp_float_adjustment_update),
383
g_signal_connect_swapped (adj, "value_changed",
390
g_signal_connect_swapped (adj, "value-changed",
384
391
G_CALLBACK (gimp_preview_invalidate),
416
gimp_preview_get_size (preview, &width, &height);
417
src = gimp_drawable_get_thumbnail_data (drawable->drawable_id,
418
&width, &height, &bytes);
423
src = gimp_zoom_preview_get_source (GIMP_ZOOM_PREVIEW (preview),
424
&width, &height, &bytes);