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
* Colorify. Changes the pixel's luminosity to a specified color
27
27
#include "libgimp/stdplugins-intl.h"
30
#define PLUG_IN_NAME "plug_in_colorify"
30
#define PLUG_IN_PROC "plug-in-colorify"
31
#define PLUG_IN_BINARY "colorify"
31
32
#define PLUG_IN_VERSION "1.1"
32
#define HELP_ID "plug-in-colorify"
34
34
#define COLOR_SIZE 30
95
static GimpParamDef args[] =
93
static const GimpParamDef args[] =
97
{ GIMP_PDB_INT32, "run_mode", "Interactive, non-interactive" },
98
{ GIMP_PDB_IMAGE, "image", "Input image" },
99
{ GIMP_PDB_DRAWABLE, "drawable", "Input drawable" },
100
{ GIMP_PDB_COLOR, "color", "Color to apply"}
95
{ GIMP_PDB_INT32, "run-mode", "Interactive, non-interactive" },
96
{ GIMP_PDB_IMAGE, "image", "Input image" },
97
{ GIMP_PDB_DRAWABLE, "drawable", "Input drawable" },
98
{ GIMP_PDB_COLOR, "color", "Color to apply" }
103
gimp_install_procedure (PLUG_IN_NAME,
104
"Similar to the \"Color\" mode for layers.",
101
gimp_install_procedure (PLUG_IN_PROC,
102
N_("Replace all colors with shades of a specified color"),
105
103
"Makes an average of the RGB channels and uses it "
106
104
"to set the color",
107
105
"Francisco Bustamante",
108
106
"Francisco Bustamante",
113
111
G_N_ELEMENTS (args), 0,
116
gimp_plugin_menu_register (PLUG_IN_NAME, "<Image>/Filters/Colors");
114
gimp_plugin_menu_register (PLUG_IN_PROC, "<Image>/Colors/Modify");
144
142
switch (run_mode)
146
144
case GIMP_RUN_INTERACTIVE:
147
gimp_get_data (PLUG_IN_NAME, &cvals);
145
gimp_get_data (PLUG_IN_PROC, &cvals);
148
146
if (!colorify_dialog (drawable))
160
158
case GIMP_RUN_WITH_LAST_VALS:
161
159
/* Possibly retrieve data */
162
gimp_get_data (PLUG_IN_NAME, &cvals);
160
gimp_get_data (PLUG_IN_PROC, &cvals);
169
167
if (status == GIMP_PDB_SUCCESS)
171
gimp_progress_init (_("Colorifying..."));
169
gimp_progress_init (_("Colorifying"));
173
171
colorify (drawable, NULL);
175
173
if (run_mode == GIMP_RUN_INTERACTIVE)
176
gimp_set_data (PLUG_IN_NAME, &cvals, sizeof (ColorifyVals));
174
gimp_set_data (PLUG_IN_PROC, &cvals, sizeof (ColorifyVals));
178
176
if (run_mode != GIMP_RUN_NONINTERACTIVE)
179
177
gimp_displays_flush ();
213
211
for (i = 0; i < 256; i ++)
215
lum_red_lookup[i] = i * GIMP_RGB_INTENSITY_RED;
216
lum_green_lookup[i] = i * GIMP_RGB_INTENSITY_GREEN;
217
lum_blue_lookup[i] = i * GIMP_RGB_INTENSITY_BLUE;
213
lum_red_lookup[i] = i * GIMP_RGB_LUMINANCE_RED;
214
lum_green_lookup[i] = i * GIMP_RGB_LUMINANCE_GREEN;
215
lum_blue_lookup[i] = i * GIMP_RGB_LUMINANCE_BLUE;
218
216
final_red_lookup[i] = i * cvals.color.r;
219
217
final_green_lookup[i] = i * cvals.color.g;
220
218
final_blue_lookup[i] = i * cvals.color.b;
225
223
gint width, height, bytes;
228
gimp_preview_get_size (preview, &width, &height);
229
src = gimp_drawable_get_thumbnail_data (drawable->drawable_id,
230
&width, &height, &bytes);
226
src = gimp_zoom_preview_get_source (GIMP_ZOOM_PREVIEW (preview),
227
&width, &height, &bytes);
231
228
for (i = 0; i < width * height; i++)
232
229
colorify_func (src + i * bytes, src + i * bytes, bytes, NULL);
256
gimp_ui_init ("colorify", TRUE);
253
gimp_ui_init (PLUG_IN_BINARY, TRUE);
258
dialog = gimp_dialog_new (_("Colorify"), "colorify",
255
dialog = gimp_dialog_new (_("Colorify"), PLUG_IN_BINARY,
260
gimp_standard_help_func, HELP_ID,
257
gimp_standard_help_func, PLUG_IN_PROC,
262
259
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
263
260
GTK_STOCK_OK, GTK_RESPONSE_OK,
264
gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
269
gimp_window_set_transient (GTK_WINDOW (dialog));
267
271
main_vbox = gtk_vbox_new (FALSE, 12);
268
272
gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
269
273
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), main_vbox);
270
274
gtk_widget_show (main_vbox);
272
preview = gimp_aspect_preview_new (drawable, &cvals.preview);
276
preview = gimp_zoom_preview_new (drawable);
273
277
gtk_box_pack_start (GTK_BOX (main_vbox), preview, TRUE, TRUE, 0);
274
278
gtk_widget_show (preview);
275
279
g_signal_connect_swapped (preview, "invalidated",
282
286
gtk_box_pack_start (GTK_BOX (main_vbox), table, FALSE, FALSE, 0);
283
287
gtk_widget_show (table);
285
label = gtk_label_new (_("Custom Color:"));
289
label = gtk_label_new (_("Custom color:"));
286
290
gtk_table_attach (GTK_TABLE (table), label, 4, 6, 0, 1,
287
291
GTK_FILL, GTK_FILL, 0, 0);
288
292
gtk_widget_show (label);
291
295
COLOR_SIZE, COLOR_SIZE,
293
297
GIMP_COLOR_AREA_FLAT);
294
g_signal_connect (custom_color_button, "color_changed",
298
g_signal_connect (custom_color_button, "color-changed",
295
299
G_CALLBACK (gimp_color_button_get_color),
297
g_signal_connect_swapped (custom_color_button, "color_changed",
301
g_signal_connect_swapped (custom_color_button, "color-changed",
298
302
G_CALLBACK (gimp_preview_invalidate),