3
3
* with algorithm by clahey
6
/* The GIMP -- an image manipulation program
6
/* GIMP - The GNU Image Manipulation Program
7
7
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
9
9
* This program is free software; you can redistribute it and/or modify
24
24
#include "config.h"
29
26
#include <libgimp/gimp.h>
30
27
#include <libgimp/gimpui.h>
32
29
#include "libgimp/stdplugins-intl.h"
32
#define PLUG_IN_PROC "plug-in-colortoalpha"
33
#define PLUG_IN_BINARY "colortoaplha"
52
51
gint *nreturn_vals,
53
52
GimpParam **return_vals);
55
static void inline color_to_alpha (GimpRGB *src,
54
static inline void color_to_alpha (GimpRGB *src,
56
55
const GimpRGB *color);
57
56
static void to_alpha_func (const guchar *src,
88
static GimpParamDef args[] =
87
static const GimpParamDef args[] =
90
{ GIMP_PDB_INT32, "run_mode", "Interactive, non-interactive" },
91
{ GIMP_PDB_IMAGE, "image", "Input image (unused)" },
92
{ GIMP_PDB_DRAWABLE, "drawable", "Input drawable" },
93
{ GIMP_PDB_COLOR, "color", "Color to remove" }
89
{ GIMP_PDB_INT32, "run-mode", "Interactive, non-interactive" },
90
{ GIMP_PDB_IMAGE, "image", "Input image (unused)" },
91
{ GIMP_PDB_DRAWABLE, "drawable", "Input drawable" },
92
{ GIMP_PDB_COLOR, "color", "Color to remove" }
96
gimp_install_procedure ("plug_in_colortoalpha",
97
"Convert the color in an image to alpha",
95
gimp_install_procedure (PLUG_IN_PROC,
96
N_("Convert a specified color to transparency"),
98
97
"This replaces as much of a given color as possible "
99
98
"in each pixel with a corresponding amount of alpha, "
100
99
"then readjusts the color accordingly.",
107
106
G_N_ELEMENTS (args), 0,
110
gimp_plugin_menu_register ("plug_in_colortoalpha",
111
"<Image>/Filters/Colors");
112
gimp_plugin_menu_register ("plug_in_colortoalpha",
109
gimp_plugin_menu_register (PLUG_IN_PROC,
110
"<Image>/Colors/Modify");
111
gimp_plugin_menu_register (PLUG_IN_PROC,
113
112
"<Image>/Layer/Transparency/Modify");
142
141
switch (run_mode)
144
143
case GIMP_RUN_INTERACTIVE:
145
gimp_get_data ("plug_in_colortoalpha", &pvals);
144
gimp_get_data (PLUG_IN_PROC, &pvals);
146
145
if (! color_to_alpha_dialog (drawable))
148
147
gimp_drawable_detach (drawable);
180
179
/* Reget the drawable, bpp might have changed */
181
180
drawable = gimp_drawable_get (drawable->drawable_id);
183
/* Unset 'Keep transparency' */
184
preserve_trans = gimp_layer_get_preserve_trans (drawable->drawable_id);
185
gimp_layer_set_preserve_trans (drawable->drawable_id, FALSE);
182
/* Unset 'Lock alpha' */
183
lock_alpha = gimp_layer_get_lock_alpha (drawable->drawable_id);
184
gimp_layer_set_lock_alpha (drawable->drawable_id, FALSE);
187
gimp_progress_init (_("Removing color..."));
186
gimp_progress_init (_("Removing color"));
188
187
gimp_rgn_iterate2 (drawable, 0 /* unused */, to_alpha_func, NULL);
190
gimp_layer_set_preserve_trans (drawable->drawable_id, preserve_trans);
189
gimp_layer_set_lock_alpha (drawable->drawable_id, lock_alpha);
192
191
gimp_image_undo_group_end (image_ID);
198
197
gimp_drawable_detach (drawable);
200
199
if (run_mode == GIMP_RUN_INTERACTIVE)
201
gimp_set_data ("plug_in_colortoalpha", &pvals, sizeof (pvals));
200
gimp_set_data (PLUG_IN_PROC, &pvals, sizeof (pvals));
203
202
values[0].data.d_status = status;
375
374
GtkWidget *label;
378
gimp_ui_init ("colortoalpha", TRUE);
377
gimp_ui_init (PLUG_IN_BINARY, TRUE);
380
dialog = gimp_dialog_new (_("Color to Alpha"), "colortoalpha",
379
dialog = gimp_dialog_new (_("Color to Alpha"), PLUG_IN_BINARY,
382
gimp_standard_help_func, "plug-in-colortoalpha",
381
gimp_standard_help_func, PLUG_IN_PROC,
384
383
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
385
384
GTK_STOCK_OK, GTK_RESPONSE_OK,
388
gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
393
gimp_window_set_transient (GTK_WINDOW (dialog));
389
395
main_vbox = gtk_vbox_new (FALSE, 12);
390
396
gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
391
397
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), main_vbox);
410
416
PRV_WIDTH, PRV_HEIGHT,
412
418
GIMP_COLOR_AREA_FLAT);
419
gimp_color_button_set_update (GIMP_COLOR_BUTTON (button), TRUE);
413
420
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
414
421
gtk_widget_show (button);
416
g_signal_connect (button, "color_changed",
423
g_signal_connect (button, "color-changed",
417
424
G_CALLBACK (gimp_color_button_get_color),
419
g_signal_connect_swapped (button, "color_changed",
426
g_signal_connect_swapped (button, "color-changed",
420
427
G_CALLBACK (gimp_preview_invalidate),