2006-12-10 05:33:38 +08:00
|
|
|
# GIMP - The GNU Image Manipulation Program
|
1999-04-27 12:33:41 +08:00
|
|
|
# Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
|
|
|
2009-01-18 06:28:01 +08:00
|
|
|
# This program is free software: you can redistribute it and/or modify
|
1999-04-27 12:33:41 +08:00
|
|
|
# it under the terms of the GNU General Public License as published by
|
2009-01-18 06:28:01 +08:00
|
|
|
# the Free Software Foundation; either version 3 of the License, or
|
1999-04-27 12:33:41 +08:00
|
|
|
# (at your option) any later version.
|
|
|
|
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
|
|
|
|
# You should have received a copy of the GNU General Public License
|
2018-07-12 05:27:07 +08:00
|
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
# "Perlized" from C source by Manish Singh <yosh@gimp.org>
|
|
|
|
|
2019-08-29 17:25:35 +08:00
|
|
|
sub image_id_is_valid {
|
|
|
|
$blurb = 'Returns TRUE if the image ID is valid.';
|
2007-01-13 03:59:36 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
2019-08-29 17:25:35 +08:00
|
|
|
This procedure checks if the given image ID is valid and refers to an
|
2007-01-13 03:59:36 +08:00
|
|
|
existing image.
|
|
|
|
HELP
|
|
|
|
|
2019-08-29 17:25:35 +08:00
|
|
|
&neo_pdb_misc('2007', '3.0');
|
2007-01-13 03:59:36 +08:00
|
|
|
|
|
|
|
@inargs = (
|
2019-08-29 17:25:35 +08:00
|
|
|
{ name => 'image_id', type => 'int32',
|
|
|
|
desc => 'The image ID to check' }
|
2007-01-13 03:59:36 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'valid', type => 'boolean',
|
2019-08-29 17:25:35 +08:00
|
|
|
desc => 'Whether the image ID is valid' }
|
2007-01-13 03:59:36 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2007-01-13 03:59:36 +08:00
|
|
|
{
|
2019-08-29 17:25:35 +08:00
|
|
|
valid = (gimp_image_get_by_id (gimp, image_id) != NULL);
|
2007-01-13 03:59:36 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2019-09-05 18:57:43 +08:00
|
|
|
sub get_images {
|
1999-04-27 12:33:41 +08:00
|
|
|
$blurb = 'Returns the list of images currently open.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2007-06-06 16:44:52 +08:00
|
|
|
This procedure returns the list of images currently open in GIMP.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
2006-03-17 00:54:58 +08:00
|
|
|
&std_pdb_misc;
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 00:54:58 +08:00
|
|
|
@outargs = (
|
2019-09-05 18:57:43 +08:00
|
|
|
{ name => 'images', type => 'imagearray',
|
2019-08-05 04:09:04 +08:00
|
|
|
desc => 'The list of images currently open.',
|
2011-08-13 02:18:45 +08:00
|
|
|
array => { name => 'num_images',
|
|
|
|
desc => 'The number of images currently open' } }
|
2006-03-17 00:54:58 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 00:54:58 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<CODE
|
2006-03-17 00:54:58 +08:00
|
|
|
{
|
2008-11-03 05:34:14 +08:00
|
|
|
GList *list = gimp_get_image_iter (gimp);
|
2006-03-17 00:54:58 +08:00
|
|
|
|
|
|
|
num_images = g_list_length (list);
|
|
|
|
|
|
|
|
if (num_images)
|
|
|
|
{
|
|
|
|
gint i;
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2019-09-05 18:57:43 +08:00
|
|
|
images = g_new (GimpImage *, num_images);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 00:54:58 +08:00
|
|
|
for (i = 0; i < num_images; i++, list = g_list_next (list))
|
2019-09-05 18:57:43 +08:00
|
|
|
images[i] = g_object_ref (list->data);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
}
|
2006-03-17 00:54:58 +08:00
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
sub image_new {
|
|
|
|
$blurb = 'Creates a new image with the specified width, height, and type.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2013-10-04 20:47:05 +08:00
|
|
|
Creates a new image, undisplayed, with the specified extents and
|
2008-09-24 15:47:58 +08:00
|
|
|
type. A layer should be created and added before this image is
|
|
|
|
displayed, or subsequent calls to gimp_display_new() with this image
|
|
|
|
as an argument will fail. Layers can be created using the
|
|
|
|
gimp_layer_new() commands. They can be added to an image using the
|
2010-09-06 05:54:23 +08:00
|
|
|
gimp_image_insert_layer() command.
|
2013-10-04 20:47:05 +08:00
|
|
|
|
|
|
|
|
|
|
|
If your image's type if INDEXED, a colormap must also be added with
|
|
|
|
gimp_image_set_colormap(). An indexed image without a colormap will
|
|
|
|
output unexpected colors.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
|
|
|
|
desc => 'The width of the image' },
|
|
|
|
{ name => 'height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
|
|
|
|
desc => 'The height of the image' },
|
|
|
|
{ name => 'type', type => 'enum GimpImageBaseType',
|
|
|
|
desc => 'The type of image' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
2019-08-11 20:20:05 +08:00
|
|
|
desc => 'The newly created image' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2003-12-08 20:28:29 +08:00
|
|
|
{
|
2012-04-22 23:31:32 +08:00
|
|
|
image = gimp_create_image (gimp, width, height, type,
|
Initial space invasion commit in GIMP
All babl formats now have a space equivalent to a color profile,
determining the format's primaries and TRCs. This commit makes GIMP
aware of this.
libgimp:
- enum GimpPrecision: rename GAMMA values to NON_LINEAR and keep GAMMA
as deprecated aliases, add PERCEPTUAL values so we now have LINEAR,
NON_LINEAR and PERCPTUAL for each encoding, matching the babl
encoding variants RGB, R'G'B' and R~G~B~.
- gimp_color_transform_can_gegl_copy() now returns TRUE if both
profiles can return a babl space, increasing the amount of fast babl
color conversions significantly.
- TODO: no solution yet for getting libgimp drawable proxy buffers in
the right format with space.
plug-ins:
- follow the GimpPrecision change.
- TODO: everything else unchanged and partly broken or sub-optimal,
like setting a new image's color profile too late.
app:
- add enum GimpTRCType { LINEAR, NON_LINEAR, PERCEPTUAL } as
replacement for all "linear" booleans.
- change gimp-babl functions to take babl spaces and GimpTRCType
parameters and support all sorts of new perceptual ~ formats.
- a lot of places changed in the early days of goat invasion didn't
take advantage of gimp-babl utility functions and constructed
formats manually. They all needed revisiting and many now use much
simpler code calling gimp-babl API.
- change gimp_babl_format_get_color_profile() to really extract a
newly allocated color profile from the format, and add
gimp_babl_get_builtin_color_profile() which does the same as
gimp_babl_format_get_color_profile() did before. Visited all callers
to decide whether they are looking for the format's actual profile,
or for one of the builtin profiles, simplifying code that only needs
builtin profiles.
- drawables have a new get_space_api(), get_linear() is now get_trc().
- images now have a "layer space" and an API to get it,
gimp_image_get_layer_format() returns formats in that space.
- an image's layer space is created from the image's color profile,
change gimpimage-color-profile to deal with that correctly
- change many babl_format() calls to babl_format_with_space() and take
the space from passed formats or drawables
- add function gimp_layer_fix_format_space() which replaces the
layer's buffer with one that has the image's layer format, but
doesn't change pixel values
- use gimp_layer_fix_format_space() to make sure layers loaded from
XCF and created by plug-ins have the right space when added to the
image, because it's impossible to always assign the right space upon
layer creation
- "assign color profile" and "discard color profile" now require use
of gimp_layer_fix_format_space() too because the profile is now
embedded in all formats via the space. Add
gimp_image_assign_color_profile() which does all that and call it
instead of a simple gimp_image_set_color_profile(), also from the
PDB set-color-profile functions, which are essentially "assign" and
"discard" calls.
- generally, make sure a new image's color profile is set before
adding layers to it, gimp_image_set_color_profile() is more than
before considered know-what-you-are-doing API.
- take special precaution in all places that call
gimp_drawable_convert_type(), we now must pass a new_profile from
all callers that convert layers within the same image (such as
image_convert_type, image_convert_precision), because the layer's
new space can't be determined from the image's layer format during
the call.
- change all "linear" properties to "trc", in all config objects like
for levels and curves, in the histogram, in the widgets. This results
in some GUI that now has three choices instead of two.
TODO: we might want to reduce that back to two later.
- keep "linear" boolean properties around as compat if needed for file
pasring, but always convert the parsed parsed boolean to
GimpTRCType.
- TODO: the image's "enable color management" switch is currently
broken, will fix that in another commit.
2018-07-21 20:23:01 +08:00
|
|
|
GIMP_PRECISION_U8_NON_LINEAR, FALSE);
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
if (! image)
|
|
|
|
success = FALSE;
|
2003-12-08 20:28:29 +08:00
|
|
|
}
|
1999-04-27 12:33:41 +08:00
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2012-04-26 02:39:23 +08:00
|
|
|
sub image_new_with_precision {
|
|
|
|
$blurb = 'Creates a new image with the specified width, height, type and precision.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
Initial space invasion commit in GIMP
All babl formats now have a space equivalent to a color profile,
determining the format's primaries and TRCs. This commit makes GIMP
aware of this.
libgimp:
- enum GimpPrecision: rename GAMMA values to NON_LINEAR and keep GAMMA
as deprecated aliases, add PERCEPTUAL values so we now have LINEAR,
NON_LINEAR and PERCPTUAL for each encoding, matching the babl
encoding variants RGB, R'G'B' and R~G~B~.
- gimp_color_transform_can_gegl_copy() now returns TRUE if both
profiles can return a babl space, increasing the amount of fast babl
color conversions significantly.
- TODO: no solution yet for getting libgimp drawable proxy buffers in
the right format with space.
plug-ins:
- follow the GimpPrecision change.
- TODO: everything else unchanged and partly broken or sub-optimal,
like setting a new image's color profile too late.
app:
- add enum GimpTRCType { LINEAR, NON_LINEAR, PERCEPTUAL } as
replacement for all "linear" booleans.
- change gimp-babl functions to take babl spaces and GimpTRCType
parameters and support all sorts of new perceptual ~ formats.
- a lot of places changed in the early days of goat invasion didn't
take advantage of gimp-babl utility functions and constructed
formats manually. They all needed revisiting and many now use much
simpler code calling gimp-babl API.
- change gimp_babl_format_get_color_profile() to really extract a
newly allocated color profile from the format, and add
gimp_babl_get_builtin_color_profile() which does the same as
gimp_babl_format_get_color_profile() did before. Visited all callers
to decide whether they are looking for the format's actual profile,
or for one of the builtin profiles, simplifying code that only needs
builtin profiles.
- drawables have a new get_space_api(), get_linear() is now get_trc().
- images now have a "layer space" and an API to get it,
gimp_image_get_layer_format() returns formats in that space.
- an image's layer space is created from the image's color profile,
change gimpimage-color-profile to deal with that correctly
- change many babl_format() calls to babl_format_with_space() and take
the space from passed formats or drawables
- add function gimp_layer_fix_format_space() which replaces the
layer's buffer with one that has the image's layer format, but
doesn't change pixel values
- use gimp_layer_fix_format_space() to make sure layers loaded from
XCF and created by plug-ins have the right space when added to the
image, because it's impossible to always assign the right space upon
layer creation
- "assign color profile" and "discard color profile" now require use
of gimp_layer_fix_format_space() too because the profile is now
embedded in all formats via the space. Add
gimp_image_assign_color_profile() which does all that and call it
instead of a simple gimp_image_set_color_profile(), also from the
PDB set-color-profile functions, which are essentially "assign" and
"discard" calls.
- generally, make sure a new image's color profile is set before
adding layers to it, gimp_image_set_color_profile() is more than
before considered know-what-you-are-doing API.
- take special precaution in all places that call
gimp_drawable_convert_type(), we now must pass a new_profile from
all callers that convert layers within the same image (such as
image_convert_type, image_convert_precision), because the layer's
new space can't be determined from the image's layer format during
the call.
- change all "linear" properties to "trc", in all config objects like
for levels and curves, in the histogram, in the widgets. This results
in some GUI that now has three choices instead of two.
TODO: we might want to reduce that back to two later.
- keep "linear" boolean properties around as compat if needed for file
pasring, but always convert the parsed parsed boolean to
GimpTRCType.
- TODO: the image's "enable color management" switch is currently
broken, will fix that in another commit.
2018-07-21 20:23:01 +08:00
|
|
|
Creates a new image, undisplayed with the specified extents, type and
|
|
|
|
precision. Indexed images can only be created at
|
|
|
|
GIMP_PRECISION_U8_NON_LINEAR precision. See gimp_image_new() for
|
|
|
|
further details.
|
2012-04-26 02:39:23 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&mitch_pdb_misc('2012', '2.10');
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
|
|
|
|
desc => 'The width of the image' },
|
|
|
|
{ name => 'height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
|
|
|
|
desc => 'The height of the image' },
|
|
|
|
{ name => 'type', type => 'enum GimpImageBaseType',
|
|
|
|
desc => 'The type of image' },
|
|
|
|
{ name => 'precision', type => 'enum GimpPrecision',
|
|
|
|
desc => 'The precision' }
|
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
2019-08-11 20:20:05 +08:00
|
|
|
desc => 'The newly created image' }
|
2012-04-26 02:39:23 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
2018-07-07 01:43:26 +08:00
|
|
|
if (gimp_babl_is_valid (type, precision))
|
2012-04-26 02:39:23 +08:00
|
|
|
{
|
|
|
|
image = gimp_create_image (gimp, width, height, type,
|
|
|
|
precision, FALSE);
|
|
|
|
if (! image)
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2003-12-09 01:26:55 +08:00
|
|
|
sub image_duplicate {
|
|
|
|
$blurb = 'Duplicate the specified image';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure duplicates the specified image, copying all layers, channels,
|
|
|
|
and image information.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
$date = '1997';
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
2003-12-09 01:26:55 +08:00
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'new_image', type => 'image',
|
|
|
|
desc => 'The new, duplicated image' }
|
2003-12-09 01:26:55 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
headers => [ qw("core/gimpimage-duplicate.h") ],
|
2003-12-09 01:26:55 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
new_image = gimp_image_duplicate (image);
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
if (! new_image)
|
|
|
|
success = FALSE;
|
|
|
|
}
|
2003-12-09 01:26:55 +08:00
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_delete {
|
|
|
|
$blurb = 'Delete the specified image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
If there are no displays associated with this image it will be deleted.
|
|
|
|
This means that you can not delete an image through the PDB that was
|
|
|
|
created by the user. If the associated display was however created
|
|
|
|
through the PDB and you know the display ID, you may delete the display.
|
|
|
|
Removal of the last associated display will then delete the image.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
2003-12-09 01:26:55 +08:00
|
|
|
|
2006-03-22 17:58:08 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2003-12-09 01:26:55 +08:00
|
|
|
{
|
2010-02-04 04:20:29 +08:00
|
|
|
if (gimp_image_get_display_count (image) == 0)
|
2006-03-24 05:17:16 +08:00
|
|
|
g_object_unref (image);
|
2003-12-09 01:26:55 +08:00
|
|
|
else
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
2006-03-22 17:58:08 +08:00
|
|
|
);
|
2003-12-09 01:26:55 +08:00
|
|
|
}
|
|
|
|
|
1999-04-27 12:33:41 +08:00
|
|
|
sub image_get_layers {
|
2021-04-04 06:02:19 +08:00
|
|
|
$blurb = 'Returns the list of root layers contained in the specified image.';
|
2006-03-17 00:54:58 +08:00
|
|
|
|
|
|
|
$help = <<HELP;
|
2021-04-04 06:02:19 +08:00
|
|
|
This procedure returns the list of root layers contained in the specified image.
|
2006-03-17 00:54:58 +08:00
|
|
|
The order of layers is from topmost to bottommost.
|
2021-04-04 06:02:19 +08:00
|
|
|
|
|
|
|
Note that this is not the full list of layers, but only the root layers,
|
|
|
|
i.e. layers with no parents themselves. If you need all layers, it is up
|
|
|
|
to you to verify that any of these layers is a group layer with
|
|
|
|
gimp_item_is_group() and to obtain its children with
|
|
|
|
gimp_item_get_children() (possibly recursively checking if these have
|
|
|
|
children too).
|
2006-03-17 00:54:58 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 00:54:58 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 00:54:58 +08:00
|
|
|
@outargs = (
|
2019-09-05 18:57:43 +08:00
|
|
|
{ name => 'layers', type => 'layerarray',
|
2019-08-05 04:09:04 +08:00
|
|
|
desc => 'The list of layers contained in the image.',
|
2011-08-13 02:18:45 +08:00
|
|
|
array => { name => 'num_layers',
|
2021-04-04 06:02:19 +08:00
|
|
|
desc => 'The number of root layers contained in the image' } }
|
2006-03-17 00:54:58 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 00:54:58 +08:00
|
|
|
{
|
2008-11-03 04:46:57 +08:00
|
|
|
GList *list = gimp_image_get_layer_iter (image);
|
2006-03-17 00:54:58 +08:00
|
|
|
|
|
|
|
num_layers = g_list_length (list);
|
|
|
|
|
|
|
|
if (num_layers)
|
|
|
|
{
|
|
|
|
gint i;
|
|
|
|
|
2019-09-05 18:57:43 +08:00
|
|
|
layers = g_new (GimpLayer *, num_layers);
|
2006-03-17 00:54:58 +08:00
|
|
|
|
|
|
|
for (i = 0; i < num_layers; i++, list = g_list_next (list))
|
2019-09-05 18:57:43 +08:00
|
|
|
layers[i] = g_object_ref (list->data);
|
2006-03-17 00:54:58 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
sub image_get_channels {
|
2006-03-17 00:54:58 +08:00
|
|
|
$blurb = 'Returns the list of channels contained in the specified image.';
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 00:54:58 +08:00
|
|
|
$help = <<HELP;
|
|
|
|
This procedure returns the list of channels contained in the specified image.
|
1999-04-27 12:33:41 +08:00
|
|
|
This does not include the selection mask, or layer masks. The order is from
|
2013-05-11 04:11:14 +08:00
|
|
|
topmost to bottommost. Note that "channels" are custom channels and do not
|
|
|
|
include the image's color components.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
2006-03-17 00:54:58 +08:00
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 00:54:58 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2019-09-05 18:57:43 +08:00
|
|
|
{ name => 'channels', type => 'channelarray',
|
2019-08-05 04:09:04 +08:00
|
|
|
desc => 'The list of channels contained in the image.',
|
2011-08-13 02:18:45 +08:00
|
|
|
array => { name => 'num_channels',
|
|
|
|
desc => 'The number of channels contained in the image' } }
|
2006-03-17 00:54:58 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 00:54:58 +08:00
|
|
|
{
|
2008-11-03 04:46:57 +08:00
|
|
|
GList *list = gimp_image_get_channel_iter (image);
|
2006-03-17 00:54:58 +08:00
|
|
|
|
|
|
|
num_channels = g_list_length (list);
|
|
|
|
|
|
|
|
if (num_channels)
|
|
|
|
{
|
|
|
|
gint i;
|
|
|
|
|
2019-09-05 18:57:43 +08:00
|
|
|
channels = g_new (GimpChannel *, num_channels);
|
2006-03-17 00:54:58 +08:00
|
|
|
|
|
|
|
for (i = 0; i < num_channels; i++, list = g_list_next (list))
|
2019-09-05 18:57:43 +08:00
|
|
|
channels[i] = g_object_ref (list->data);
|
2006-03-17 00:54:58 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
|
2005-04-14 10:32:23 +08:00
|
|
|
sub image_get_vectors {
|
2006-03-17 00:54:58 +08:00
|
|
|
$blurb = 'Returns the list of vectors contained in the specified image.';
|
|
|
|
|
|
|
|
$help = <<HELP;
|
|
|
|
This procedure returns the list of vectors contained in the specified image.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&simon_pdb_misc('2005', '2.4');
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 00:54:58 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2019-09-05 18:57:43 +08:00
|
|
|
{ name => 'vectors', type => 'vectorarray',
|
2019-08-05 04:09:04 +08:00
|
|
|
desc => 'The list of vectors contained in the image.',
|
2011-08-13 02:18:45 +08:00
|
|
|
array => { name => 'num_vectors',
|
|
|
|
desc => 'The number of vectors contained in the image' } }
|
2006-03-17 00:54:58 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 00:54:58 +08:00
|
|
|
{
|
2008-11-03 04:46:57 +08:00
|
|
|
GList *list = gimp_image_get_vectors_iter (image);
|
2006-03-17 00:54:58 +08:00
|
|
|
|
|
|
|
num_vectors = g_list_length (list);
|
|
|
|
|
|
|
|
if (num_vectors)
|
|
|
|
{
|
|
|
|
gint i;
|
|
|
|
|
2019-09-05 18:57:43 +08:00
|
|
|
vectors = g_new (GimpVectors *, num_vectors);
|
2005-04-14 10:32:23 +08:00
|
|
|
|
2006-03-17 00:54:58 +08:00
|
|
|
for (i = 0; i < num_vectors; i++, list = g_list_next (list))
|
2019-09-05 18:57:43 +08:00
|
|
|
vectors[i] = g_object_ref (list->data);
|
2006-03-17 00:54:58 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
2005-04-14 10:32:23 +08:00
|
|
|
}
|
|
|
|
|
1999-04-27 12:33:41 +08:00
|
|
|
sub image_unset_active_channel {
|
|
|
|
$blurb = 'Unsets the active channel in the specified image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2008-09-24 15:47:58 +08:00
|
|
|
If an active channel exists, it is unset. There then exists no active
|
|
|
|
channel, and if desired, one can be set through a call to 'Set Active
|
|
|
|
Channel'. No error is returned in the case of no existing active
|
|
|
|
channel.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2020-04-04 08:49:51 +08:00
|
|
|
gimp_image_unset_selected_channels (image);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
|
2004-01-05 22:35:19 +08:00
|
|
|
sub image_pick_color {
|
|
|
|
$blurb = <<'BLURB';
|
2020-05-17 23:51:32 +08:00
|
|
|
Determine the color at the given coordinates
|
2004-01-05 22:35:19 +08:00
|
|
|
BLURB
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This tool determines the color at the specified coordinates. The
|
|
|
|
returned color is an RGB triplet even for grayscale and indexed
|
|
|
|
drawables. If the coordinates lie outside of the extents of the
|
2020-05-17 23:51:32 +08:00
|
|
|
specified drawables, then an error is returned. All drawables must
|
|
|
|
belong to the image and be of the same type.
|
|
|
|
|
|
|
|
If only one drawable is given and it has an alpha channel, the algorithm
|
|
|
|
examines the alpha value of the drawable at the coordinates. If the
|
|
|
|
alpha value is completely transparent (0), then an error is returned.
|
|
|
|
With several drawables specified, the composite image with only these
|
|
|
|
drawables is used.
|
|
|
|
|
|
|
|
If the sample_merged parameter is TRUE, the data of the composite image
|
|
|
|
will be used instead of that for the specified drawables. This is
|
|
|
|
equivalent to sampling for colors after merging all visible layers. In
|
|
|
|
the case of a merged sampling, the supplied drawables are ignored.
|
2004-01-05 22:35:19 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
2020-05-17 23:51:32 +08:00
|
|
|
{ name => 'drawables', type => 'itemarray',
|
|
|
|
desc => 'The drawables to pick from',
|
|
|
|
no_validate => 1,
|
|
|
|
array => { name => 'num_drawables',
|
|
|
|
type => '1 <= int32',
|
|
|
|
desc => "The number of drawables" } },
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'x', type => 'float',
|
|
|
|
desc => 'x coordinate of upper-left corner of rectangle' },
|
|
|
|
{ name => 'y', type => 'float',
|
|
|
|
desc => 'y coordinate of upper-left corner of rectangle' },
|
|
|
|
{ name => 'sample_merged', type => 'boolean',
|
2020-05-17 23:51:32 +08:00
|
|
|
desc => 'Use the composite image, not the drawables' },
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'sample_average', type => 'boolean',
|
|
|
|
desc => 'Average the color of all the pixels in a specified
|
|
|
|
radius' },
|
|
|
|
{ name => 'average_radius', type => '0 < float', no_validate => 1,
|
|
|
|
desc => 'The radius of pixels to average' }
|
2004-01-05 22:35:19 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'color', type => 'color', has_alpha => 1, void_ret => 1,
|
|
|
|
desc => 'The return color' }
|
2004-01-05 22:35:19 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
headers => [ qw("core/gimpimage-pick-color.h" "core/gimppickable.h") ],
|
|
|
|
code => <<'CODE'
|
2004-01-05 22:35:19 +08:00
|
|
|
{
|
2020-05-17 23:51:32 +08:00
|
|
|
gint i;
|
|
|
|
|
|
|
|
if (! sample_merged)
|
|
|
|
{
|
|
|
|
if (num_drawables == 0)
|
|
|
|
{
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for (i = 0; i < num_drawables; i++)
|
|
|
|
if (gimp_item_get_image (GIMP_ITEM (drawables[i])) != image)
|
|
|
|
{
|
|
|
|
success = FALSE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2004-01-05 22:35:19 +08:00
|
|
|
|
2006-03-22 00:13:27 +08:00
|
|
|
if (success && sample_average)
|
|
|
|
{
|
|
|
|
if (average_radius <= 0.0)
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
|
2004-01-05 22:35:19 +08:00
|
|
|
if (success)
|
2006-03-03 03:30:59 +08:00
|
|
|
{
|
2020-05-17 23:51:32 +08:00
|
|
|
GList *drawable_list = NULL;
|
|
|
|
|
|
|
|
for (i = 0; i < num_drawables; i++)
|
|
|
|
{
|
2020-05-26 23:19:31 +08:00
|
|
|
GimpPickable *pickable = (GimpPickable *) drawables[i];
|
|
|
|
|
|
|
|
drawable_list = g_list_prepend (drawable_list, pickable);
|
2020-05-17 23:51:32 +08:00
|
|
|
if (! sample_merged)
|
2020-05-26 23:19:31 +08:00
|
|
|
gimp_pickable_flush (pickable);
|
2020-05-17 23:51:32 +08:00
|
|
|
}
|
|
|
|
|
2006-03-03 03:30:59 +08:00
|
|
|
if (sample_merged)
|
2013-09-14 05:29:06 +08:00
|
|
|
gimp_pickable_flush (GIMP_PICKABLE (image));
|
2006-03-03 03:30:59 +08:00
|
|
|
|
2006-03-24 05:17:16 +08:00
|
|
|
success = gimp_image_pick_color (image,
|
2020-05-17 23:51:32 +08:00
|
|
|
drawable_list,
|
2006-03-03 03:30:59 +08:00
|
|
|
(gint) x, (gint) y,
|
2019-09-04 23:10:24 +08:00
|
|
|
FALSE,
|
2006-03-03 03:30:59 +08:00
|
|
|
sample_merged,
|
|
|
|
sample_average,
|
|
|
|
average_radius,
|
|
|
|
NULL,
|
2015-08-25 06:05:59 +08:00
|
|
|
NULL,
|
|
|
|
&color);
|
2020-05-17 23:51:32 +08:00
|
|
|
|
|
|
|
g_list_free (drawable_list);
|
2006-03-03 03:30:59 +08:00
|
|
|
}
|
2004-01-05 22:35:19 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
1999-04-27 12:33:41 +08:00
|
|
|
sub image_pick_correlate_layer {
|
|
|
|
$blurb = 'Find the layer visible at the specified coordinates.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2008-09-24 15:47:58 +08:00
|
|
|
This procedure finds the layer which is visible at the specified
|
|
|
|
coordinates. Layers which do not qualify are those whose extents do
|
|
|
|
not pass within the specified coordinates, or which are transparent at
|
|
|
|
the specified coordinates. This procedure will return -1 if no layer
|
|
|
|
is found.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
2006-03-17 00:54:58 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'x', type => 'int32',
|
|
|
|
desc => 'The x coordinate for the pick' },
|
|
|
|
{ name => 'y', type => 'int32',
|
|
|
|
desc => 'The y coordinate for the pick' }
|
2006-03-17 00:54:58 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'layer', type => 'layer',
|
|
|
|
desc => 'The layer found at the specified coordinates' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2017-06-22 14:16:43 +08:00
|
|
|
headers => [ qw("core/gimpimage-pick-item.h") ],
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2018-12-16 06:34:07 +08:00
|
|
|
layer = gimp_image_pick_layer (image, x, y, NULL);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2010-08-27 22:11:06 +08:00
|
|
|
sub image_get_item_position {
|
|
|
|
$blurb = 'Returns the position of the item in its level of its item tree.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure determines the position of the specified item in its
|
|
|
|
level in its item tree in the image. If the item doesn't exist in the
|
|
|
|
image, or the item is not part of an item tree, an error is returned.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&mitch_pdb_misc('2010', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'item', type => 'item',
|
|
|
|
desc => 'The item' }
|
2010-08-27 22:11:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'position', type => 'int32',
|
|
|
|
desc => "The position of the item in its level in the item tree" }
|
2010-08-27 22:11:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2010-08-27 22:11:06 +08:00
|
|
|
{
|
2012-11-09 03:46:18 +08:00
|
|
|
if (gimp_pdb_item_is_in_tree (item, image, 0, error))
|
2010-08-27 22:11:06 +08:00
|
|
|
position = gimp_item_get_index (item);
|
|
|
|
else
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_raise_item {
|
|
|
|
$blurb = "Raise the specified item in its level in its item tree";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure raises the specified item one step in the item tree.
|
2019-04-06 22:36:03 +08:00
|
|
|
The procedure call will fail if there is no item above it.
|
2010-08-27 22:11:06 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&mitch_pdb_misc('2010', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'item', type => 'item',
|
|
|
|
desc => 'The item to raise' }
|
2010-08-27 22:11:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2010-08-27 22:11:06 +08:00
|
|
|
{
|
2012-11-09 03:46:18 +08:00
|
|
|
if (gimp_pdb_item_is_in_tree (item, image, 0, error))
|
2010-08-27 22:11:06 +08:00
|
|
|
success = gimp_image_raise_item (image, item, error);
|
|
|
|
else
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_lower_item {
|
|
|
|
$blurb = "Lower the specified item in its level in its item tree";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure lowers the specified item one step in the item tree.
|
2019-04-06 22:36:03 +08:00
|
|
|
The procedure call will fail if there is no item below it.
|
2010-08-27 22:11:06 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&mitch_pdb_misc('2010', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'item', type => 'item',
|
|
|
|
desc => 'The item to lower' }
|
2010-08-27 22:11:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2010-08-27 22:11:06 +08:00
|
|
|
{
|
2012-11-09 03:46:18 +08:00
|
|
|
if (gimp_pdb_item_is_in_tree (item, image, 0, error))
|
2010-08-27 22:11:06 +08:00
|
|
|
success = gimp_image_lower_item (image, item, error);
|
|
|
|
else
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_raise_item_to_top {
|
|
|
|
$blurb = <<'BLURB';
|
|
|
|
Raise the specified item to the top of its level in its item tree
|
|
|
|
BLURB
|
2006-11-23 06:54:53 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
2010-08-27 22:11:06 +08:00
|
|
|
This procedure raises the specified item to top of its level in the
|
|
|
|
item tree. It will not move the item if there is no item above it.
|
2006-11-23 06:54:53 +08:00
|
|
|
HELP
|
|
|
|
|
2010-08-27 22:11:06 +08:00
|
|
|
&mitch_pdb_misc('2010', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'item', type => 'item',
|
|
|
|
desc => 'The item to raise to top' }
|
2010-08-27 22:11:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2010-08-27 22:11:06 +08:00
|
|
|
{
|
2012-11-09 03:46:18 +08:00
|
|
|
if (gimp_pdb_item_is_in_tree (item, image, 0, error))
|
2010-08-27 22:11:06 +08:00
|
|
|
success = gimp_image_raise_item_to_top (image, item);
|
|
|
|
else
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_lower_item_to_bottom {
|
|
|
|
$blurb = <<'BLURB';
|
|
|
|
Lower the specified item to the bottom of its level in its item tree
|
|
|
|
BLURB
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure lowers the specified item to bottom of its level in the
|
|
|
|
item tree. It will not move the layer if there is no layer below it.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&mitch_pdb_misc('2010', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'item', type => 'item',
|
|
|
|
desc => 'The item to lower to bottom' }
|
2010-08-27 22:11:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2010-08-27 22:11:06 +08:00
|
|
|
{
|
2012-11-09 03:46:18 +08:00
|
|
|
if (gimp_pdb_item_is_in_tree (item, image, 0, error))
|
2010-08-27 22:11:06 +08:00
|
|
|
success = gimp_image_lower_item_to_bottom (image, item);
|
|
|
|
else
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2010-08-31 02:36:11 +08:00
|
|
|
sub image_reorder_item {
|
|
|
|
$blurb = "Reorder the specified item within its item tree";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure reorders the specified item within its item tree.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&mitch_pdb_misc('2010', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'item', type => 'item',
|
|
|
|
desc => 'The item to reorder' },
|
|
|
|
{ name => 'parent', type => 'item', none_ok => 1,
|
2010-08-31 02:36:11 +08:00
|
|
|
desc => 'The new parent item' },
|
|
|
|
{ name => 'position', type => 'int32',
|
|
|
|
desc => 'The new position of the item' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2010-08-31 02:36:11 +08:00
|
|
|
{
|
2012-11-09 03:46:18 +08:00
|
|
|
if (gimp_pdb_item_is_in_tree (item, image, 0, error) &&
|
2010-08-31 02:36:11 +08:00
|
|
|
(parent == NULL ||
|
2010-08-31 23:07:27 +08:00
|
|
|
(gimp_pdb_item_is_in_same_tree (item, parent, image, error) &&
|
|
|
|
gimp_pdb_item_is_group (parent, error) &&
|
|
|
|
gimp_pdb_item_is_not_ancestor (item, parent, error))))
|
2010-08-31 02:36:11 +08:00
|
|
|
{
|
|
|
|
success = gimp_image_reorder_item (image, item, parent, position,
|
|
|
|
TRUE, NULL);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
1999-04-27 12:33:41 +08:00
|
|
|
sub image_merge_visible_layers {
|
|
|
|
$blurb = 'Merge the visible image layers into one.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2008-09-24 15:47:58 +08:00
|
|
|
This procedure combines the visible layers into a single layer using
|
|
|
|
the specified merge type. A merge type of EXPAND_AS_NECESSARY expands
|
|
|
|
the final layer to encompass the areas of the visible layers. A merge
|
|
|
|
type of CLIP_TO_IMAGE clips the final layer to the extents of the
|
|
|
|
image. A merge type of CLIP_TO_BOTTOM_LAYER clips the final layer to
|
|
|
|
the size of the bottommost layer.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'merge_type',
|
|
|
|
type => 'enum GimpMergeType (no GIMP_FLATTEN_IMAGE)',
|
|
|
|
desc => 'The type of merge' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'layer', type => 'layer',
|
|
|
|
desc => 'The resulting layer' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
headers => [ qw("core/gimpimage-merge.h") ],
|
|
|
|
code => <<'CODE'
|
1999-04-27 12:33:41 +08:00
|
|
|
{
|
2020-05-07 20:30:21 +08:00
|
|
|
GList *layers;
|
|
|
|
|
|
|
|
layers = gimp_image_merge_visible_layers (image, context, merge_type,
|
|
|
|
FALSE, FALSE, progress);
|
|
|
|
|
|
|
|
if (layers)
|
|
|
|
/* With merge_selected_groups set to FALSE, we always get only a
|
|
|
|
* single selected layer.
|
|
|
|
*/
|
|
|
|
layer = layers->data;
|
2006-03-24 05:17:16 +08:00
|
|
|
|
|
|
|
if (! layer)
|
|
|
|
success = FALSE;
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_merge_down {
|
|
|
|
$blurb = 'Merge the layer passed and the first visible layer below.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2008-09-24 15:47:58 +08:00
|
|
|
This procedure combines the passed layer and the first visible layer
|
|
|
|
below it using the specified merge type. A merge type of
|
|
|
|
EXPAND_AS_NECESSARY expands the final layer to encompass the areas of
|
|
|
|
the visible layers. A merge type of CLIP_TO_IMAGE clips the final
|
|
|
|
layer to the extents of the image. A merge type of
|
|
|
|
CLIP_TO_BOTTOM_LAYER clips the final layer to the size of the
|
|
|
|
bottommost layer.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
2006-03-15 05:35:50 +08:00
|
|
|
&larry_pdb_misc('1998');
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'merge_layer', type => 'layer',
|
|
|
|
desc => 'The layer to merge down from' },
|
|
|
|
{ name => 'merge_type',
|
|
|
|
type => 'enum GimpMergeType (no GIMP_FLATTEN_IMAGE)',
|
|
|
|
desc => 'The type of merge' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'layer', type => 'layer',
|
|
|
|
desc => 'The resulting layer' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
headers => [ qw("core/gimpimage-merge.h") ],
|
|
|
|
code => <<'CODE'
|
1999-04-27 12:33:41 +08:00
|
|
|
{
|
2012-11-09 03:46:18 +08:00
|
|
|
if (gimp_pdb_item_is_attached (GIMP_ITEM (merge_layer), image, 0, error))
|
2009-08-26 04:02:02 +08:00
|
|
|
{
|
2020-07-01 05:29:05 +08:00
|
|
|
GList *merge_layers = g_list_prepend (NULL, merge_layer);
|
|
|
|
GList *layers;
|
2006-03-24 05:17:16 +08:00
|
|
|
|
2020-07-01 05:29:05 +08:00
|
|
|
layers = gimp_image_merge_down (image, merge_layers, context,
|
|
|
|
merge_type, progress, error);
|
|
|
|
g_list_free (merge_layers);
|
|
|
|
|
|
|
|
if (! layers)
|
2009-08-26 04:02:02 +08:00
|
|
|
success = FALSE;
|
2020-07-01 05:29:05 +08:00
|
|
|
else
|
|
|
|
layer = layers->data;
|
|
|
|
|
|
|
|
g_list_free (layers);
|
2009-08-26 04:02:02 +08:00
|
|
|
}
|
|
|
|
else
|
2006-03-24 05:17:16 +08:00
|
|
|
success = FALSE;
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2019-09-07 15:20:03 +08:00
|
|
|
sub image_merge_layer_group {
|
|
|
|
$blurb = 'Merge the passed layer group\'s layers into one normal layer.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure combines the layers of the passed layer group into
|
|
|
|
a single normal layer, replacing the group.
|
|
|
|
HELP
|
|
|
|
|
2019-09-07 15:53:26 +08:00
|
|
|
&ell_pdb_misc('2019', '2.10.14');
|
2019-09-07 15:20:03 +08:00
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'layer_group', type => 'layer',
|
|
|
|
desc => 'The layer group to merge' },
|
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
|
|
|
{ name => 'layer', type => 'layer',
|
|
|
|
desc => 'The resulting layer' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
headers => [ qw("core/gimpgrouplayer.h" "core/gimpimage-merge.h") ],
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
|
|
|
if (gimp_pdb_item_is_attached (GIMP_ITEM (layer_group), image, 0, error) &&
|
|
|
|
gimp_pdb_item_is_group (GIMP_ITEM (layer_group), error))
|
|
|
|
{
|
|
|
|
layer = gimp_image_merge_group_layer (image,
|
|
|
|
GIMP_GROUP_LAYER (layer_group));
|
|
|
|
|
|
|
|
if (! layer)
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
1999-04-27 12:33:41 +08:00
|
|
|
sub image_flatten {
|
|
|
|
$blurb = <<'BLURB';
|
|
|
|
Flatten all visible layers into a single layer. Discard all invisible layers.
|
|
|
|
BLURB
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure combines the visible layers in a manner analogous to merging
|
|
|
|
with the CLIP_TO_IMAGE merge type. Non-visible layers are discarded, and the
|
|
|
|
resulting image is stripped of its alpha channel.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-24 05:17:16 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'layer', type => 'layer',
|
|
|
|
desc => 'The resulting layer' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
headers => [ qw("core/gimpimage-merge.h") ],
|
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
app: merge layers in chunks, and show progress
In gimp_image_merge_layers() -- the internal function used by the
various layer-merging/flattenning functions -- process the merged-
layer graph in chunks, using gimp_gegl_apply_operation(), instead
of in one go, using gegl_node_blit_buffer(). Processing in chunks
better utilizes the cache, since it reduces the size of
intermediate buffers, reducing the chances of hitting the swap when
merging large images (see, for example, issue #3012.)
Additionally, this allows us to show progress indication. Have the
relevant gimpimage-merge functions take a GimpProgress, and pass it
down to gimp_image_merge_layers(). Adapt all callers.
2019-02-25 17:49:04 +08:00
|
|
|
layer = gimp_image_flatten (image, context,
|
|
|
|
progress, error);
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
if (! layer)
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2010-09-06 05:54:23 +08:00
|
|
|
sub image_insert_layer {
|
|
|
|
$blurb = 'Add the specified layer to the image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure adds the specified layer to the image at the given
|
2010-09-15 06:02:28 +08:00
|
|
|
position. If the specified parent is a valid layer group (See
|
|
|
|
gimp_item_is_group() and gimp_layer_group_new()) then the layer is
|
2012-08-04 08:18:15 +08:00
|
|
|
added inside the group. If the parent is 0, the layer is added inside
|
|
|
|
the main stack, outside of any group. The position argument specifies
|
|
|
|
the location of the layer inside the stack (or the group, if a valid
|
|
|
|
parent was supplied), starting from the top (0) and increasing. If
|
|
|
|
the position is specified as -1 and the parent is specified as 0, then
|
|
|
|
the layer is inserted above the active layer, or inside the group if
|
|
|
|
the active layer is a layer group. The layer type must be compatible
|
|
|
|
with the image base type.
|
2010-09-06 05:54:23 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'layer', type => 'layer',
|
|
|
|
desc => 'The layer' },
|
|
|
|
{ name => 'parent', type => 'layer', none_ok => 1,
|
2010-09-06 05:54:23 +08:00
|
|
|
desc => 'The parent layer' },
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'position', type => 'int32',
|
|
|
|
desc => 'The layer position' }
|
2010-09-06 05:54:23 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
$invoke{code} = <<'CODE';
|
|
|
|
{
|
|
|
|
if (gimp_pdb_item_is_floating (GIMP_ITEM (layer), image, error) &&
|
|
|
|
gimp_pdb_image_is_base_type (image,
|
2012-04-07 07:51:08 +08:00
|
|
|
gimp_drawable_get_base_type (GIMP_DRAWABLE (layer)),
|
2011-08-13 02:18:45 +08:00
|
|
|
error) &&
|
2010-09-06 05:54:23 +08:00
|
|
|
(parent == NULL ||
|
2012-11-09 03:46:18 +08:00
|
|
|
(gimp_pdb_item_is_in_tree (GIMP_ITEM (parent), image, 0, error) &&
|
2010-09-06 05:54:23 +08:00
|
|
|
gimp_pdb_item_is_group (GIMP_ITEM (parent), error))))
|
|
|
|
{
|
|
|
|
if (position == -1 && parent == NULL)
|
|
|
|
parent = GIMP_IMAGE_ACTIVE_PARENT;
|
|
|
|
|
Initial space invasion commit in GIMP
All babl formats now have a space equivalent to a color profile,
determining the format's primaries and TRCs. This commit makes GIMP
aware of this.
libgimp:
- enum GimpPrecision: rename GAMMA values to NON_LINEAR and keep GAMMA
as deprecated aliases, add PERCEPTUAL values so we now have LINEAR,
NON_LINEAR and PERCPTUAL for each encoding, matching the babl
encoding variants RGB, R'G'B' and R~G~B~.
- gimp_color_transform_can_gegl_copy() now returns TRUE if both
profiles can return a babl space, increasing the amount of fast babl
color conversions significantly.
- TODO: no solution yet for getting libgimp drawable proxy buffers in
the right format with space.
plug-ins:
- follow the GimpPrecision change.
- TODO: everything else unchanged and partly broken or sub-optimal,
like setting a new image's color profile too late.
app:
- add enum GimpTRCType { LINEAR, NON_LINEAR, PERCEPTUAL } as
replacement for all "linear" booleans.
- change gimp-babl functions to take babl spaces and GimpTRCType
parameters and support all sorts of new perceptual ~ formats.
- a lot of places changed in the early days of goat invasion didn't
take advantage of gimp-babl utility functions and constructed
formats manually. They all needed revisiting and many now use much
simpler code calling gimp-babl API.
- change gimp_babl_format_get_color_profile() to really extract a
newly allocated color profile from the format, and add
gimp_babl_get_builtin_color_profile() which does the same as
gimp_babl_format_get_color_profile() did before. Visited all callers
to decide whether they are looking for the format's actual profile,
or for one of the builtin profiles, simplifying code that only needs
builtin profiles.
- drawables have a new get_space_api(), get_linear() is now get_trc().
- images now have a "layer space" and an API to get it,
gimp_image_get_layer_format() returns formats in that space.
- an image's layer space is created from the image's color profile,
change gimpimage-color-profile to deal with that correctly
- change many babl_format() calls to babl_format_with_space() and take
the space from passed formats or drawables
- add function gimp_layer_fix_format_space() which replaces the
layer's buffer with one that has the image's layer format, but
doesn't change pixel values
- use gimp_layer_fix_format_space() to make sure layers loaded from
XCF and created by plug-ins have the right space when added to the
image, because it's impossible to always assign the right space upon
layer creation
- "assign color profile" and "discard color profile" now require use
of gimp_layer_fix_format_space() too because the profile is now
embedded in all formats via the space. Add
gimp_image_assign_color_profile() which does all that and call it
instead of a simple gimp_image_set_color_profile(), also from the
PDB set-color-profile functions, which are essentially "assign" and
"discard" calls.
- generally, make sure a new image's color profile is set before
adding layers to it, gimp_image_set_color_profile() is more than
before considered know-what-you-are-doing API.
- take special precaution in all places that call
gimp_drawable_convert_type(), we now must pass a new_profile from
all callers that convert layers within the same image (such as
image_convert_type, image_convert_precision), because the layer's
new space can't be determined from the image's layer format during
the call.
- change all "linear" properties to "trc", in all config objects like
for levels and curves, in the histogram, in the widgets. This results
in some GUI that now has three choices instead of two.
TODO: we might want to reduce that back to two later.
- keep "linear" boolean properties around as compat if needed for file
pasring, but always convert the parsed parsed boolean to
GimpTRCType.
- TODO: the image's "enable color management" switch is currently
broken, will fix that in another commit.
2018-07-21 20:23:01 +08:00
|
|
|
/* see layer-new */
|
|
|
|
if (gimp_drawable_is_gray (GIMP_DRAWABLE (layer)))
|
|
|
|
gimp_layer_fix_format_space (layer, TRUE, FALSE);
|
|
|
|
|
2010-09-06 05:54:23 +08:00
|
|
|
success = gimp_image_add_layer (image, layer,
|
|
|
|
parent, MAX (position, -1), TRUE);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
}
|
|
|
|
|
1999-04-27 12:33:41 +08:00
|
|
|
sub image_remove_layer {
|
|
|
|
$blurb = 'Remove the specified layer from the image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2008-09-24 15:47:58 +08:00
|
|
|
This procedure removes the specified layer from the image. If the
|
|
|
|
layer doesn't exist, an error is returned. If there are no layers left
|
|
|
|
in the image, this call will fail. If this layer is the last layer
|
|
|
|
remaining, the image will become empty and have no active layer.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'layer', type => 'layer',
|
|
|
|
desc => 'The layer' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2012-11-09 03:46:18 +08:00
|
|
|
if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), image, 0, error))
|
2008-10-10 03:40:41 +08:00
|
|
|
gimp_image_remove_layer (image, layer, TRUE, NULL);
|
2008-09-16 04:45:42 +08:00
|
|
|
else
|
|
|
|
success = FALSE;
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
|
2018-05-07 14:21:49 +08:00
|
|
|
sub image_freeze_layers {
|
|
|
|
$blurb = "Freeze the image's layer list.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2018-05-13 00:13:12 +08:00
|
|
|
This procedure freezes the layer list of the image, suppressing any
|
2018-05-07 14:21:49 +08:00
|
|
|
updates to the Layers dialog in response to changes to the image's
|
|
|
|
layers. This can significantly improve performance while applying
|
|
|
|
changes affecting the layer list.
|
|
|
|
|
|
|
|
|
|
|
|
Each call to gimp_image_freeze_layers() should be matched by a
|
|
|
|
corresponding call to gimp_image_thaw_layers(), undoing its
|
|
|
|
effects.
|
|
|
|
HELP
|
|
|
|
|
2018-05-30 01:22:12 +08:00
|
|
|
&ell_pdb_misc('2018', '2.10.2');
|
2018-05-07 14:21:49 +08:00
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
2018-05-08 02:09:07 +08:00
|
|
|
GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
|
2018-05-07 14:21:49 +08:00
|
|
|
GimpContainer *container = gimp_image_get_layers (image);
|
|
|
|
|
2018-05-08 02:09:07 +08:00
|
|
|
if (plug_in)
|
|
|
|
success = gimp_plug_in_cleanup_layers_freeze (plug_in, image);
|
|
|
|
|
|
|
|
if (success)
|
|
|
|
gimp_container_freeze (container);
|
2018-05-07 14:21:49 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_thaw_layers {
|
|
|
|
$blurb = "Thaw the image's layer list.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure thaws the layer list of the image, re-enabling
|
|
|
|
updates to the Layers dialog.
|
|
|
|
|
|
|
|
|
|
|
|
This procedure should match a corresponding call to
|
|
|
|
gimp_image_freeze_layers().
|
|
|
|
HELP
|
|
|
|
|
2018-05-30 01:22:12 +08:00
|
|
|
&ell_pdb_misc('2018', '2.10.2');
|
2018-05-07 14:21:49 +08:00
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
2018-05-08 02:09:07 +08:00
|
|
|
GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
|
2018-05-07 14:21:49 +08:00
|
|
|
GimpContainer *container = gimp_image_get_layers (image);
|
|
|
|
|
2018-05-08 02:09:07 +08:00
|
|
|
if (plug_in)
|
|
|
|
success = gimp_plug_in_cleanup_layers_thaw (plug_in, image);
|
|
|
|
|
|
|
|
if (success)
|
|
|
|
success = gimp_container_frozen (container);
|
|
|
|
|
|
|
|
if (success)
|
2018-05-07 14:21:49 +08:00
|
|
|
gimp_container_thaw (container);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2010-09-06 05:54:23 +08:00
|
|
|
sub image_insert_channel {
|
|
|
|
$blurb = 'Add the specified channel to the image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure adds the specified channel to the image at the given
|
2010-09-15 06:02:28 +08:00
|
|
|
position. Since channel groups are not currently supported, the parent
|
2011-03-02 00:09:56 +08:00
|
|
|
argument must always be 0. The position argument specifies the
|
2010-09-15 06:02:28 +08:00
|
|
|
location of the channel inside the stack, starting from the top (0) and
|
|
|
|
increasing. If the position is specified as -1, then the channel is
|
|
|
|
inserted above the active channel.
|
2010-09-06 05:54:23 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'channel', type => 'channel',
|
|
|
|
desc => 'The channel' },
|
|
|
|
{ name => 'parent', type => 'channel', none_ok => 1,
|
2010-09-06 05:54:23 +08:00
|
|
|
desc => 'The parent channel' },
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'position', type => 'int32',
|
|
|
|
desc => 'The channel position' }
|
2010-09-06 05:54:23 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
$invoke{code} = <<'CODE';
|
|
|
|
{
|
|
|
|
if (gimp_pdb_item_is_floating (GIMP_ITEM (channel), image, error) &&
|
|
|
|
(parent == NULL ||
|
2012-11-09 03:46:18 +08:00
|
|
|
(gimp_pdb_item_is_in_tree (GIMP_ITEM (parent), image, 0, error) &&
|
2010-09-06 05:54:23 +08:00
|
|
|
gimp_pdb_item_is_group (GIMP_ITEM (parent), error))))
|
|
|
|
{
|
|
|
|
if (position == -1 && parent == NULL)
|
|
|
|
parent = GIMP_IMAGE_ACTIVE_PARENT;
|
|
|
|
|
|
|
|
success = gimp_image_add_channel (image, channel,
|
|
|
|
parent, MAX (position, -1), TRUE);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
}
|
|
|
|
|
1999-04-27 12:33:41 +08:00
|
|
|
sub image_remove_channel {
|
|
|
|
$blurb = 'Remove the specified channel from the image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure removes the specified channel from the image. If the channel
|
|
|
|
doesn't exist, an error is returned.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'channel', type => 'channel',
|
|
|
|
desc => 'The channel' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2012-11-09 03:46:18 +08:00
|
|
|
if (gimp_pdb_item_is_attached (GIMP_ITEM (channel), image, 0, error))
|
2008-10-10 03:40:41 +08:00
|
|
|
gimp_image_remove_channel (image, channel, TRUE, NULL);
|
2008-09-16 04:45:42 +08:00
|
|
|
else
|
|
|
|
success = FALSE;
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
|
2018-05-07 14:21:49 +08:00
|
|
|
sub image_freeze_channels {
|
|
|
|
$blurb = "Freeze the image's channel list.";
|
|
|
|
|
2018-05-30 01:22:12 +08:00
|
|
|
&ell_pdb_misc('2018', '2.10.2');
|
2018-05-07 14:21:49 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
2018-05-13 00:13:12 +08:00
|
|
|
This procedure freezes the channel list of the image, suppressing any
|
2018-05-07 14:21:49 +08:00
|
|
|
updates to the Channels dialog in response to changes to the image's
|
|
|
|
channels. This can significantly improve performance while applying
|
|
|
|
changes affecting the channel list.
|
|
|
|
|
|
|
|
|
|
|
|
Each call to gimp_image_freeze_channels() should be matched by a
|
|
|
|
corresponding call to gimp_image_thaw_channels(), undoing its
|
|
|
|
effects.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
2018-05-08 02:09:07 +08:00
|
|
|
GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
|
2018-05-07 14:21:49 +08:00
|
|
|
GimpContainer *container = gimp_image_get_channels (image);
|
|
|
|
|
2018-05-08 02:09:07 +08:00
|
|
|
if (plug_in)
|
|
|
|
success = gimp_plug_in_cleanup_channels_freeze (plug_in, image);
|
|
|
|
|
|
|
|
if (success)
|
|
|
|
gimp_container_freeze (container);
|
2018-05-07 14:21:49 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_thaw_channels {
|
|
|
|
$blurb = "Thaw the image's channel list.";
|
|
|
|
|
2018-05-30 01:22:12 +08:00
|
|
|
&ell_pdb_misc('2018', '2.10.2');
|
2018-05-07 14:21:49 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure thaws the channel list of the image, re-enabling
|
|
|
|
updates to the Channels dialog.
|
|
|
|
|
|
|
|
|
2018-05-13 00:13:12 +08:00
|
|
|
This procedure should match a corresponding call to
|
2018-05-07 14:21:49 +08:00
|
|
|
gimp_image_freeze_channels().
|
|
|
|
HELP
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
2018-05-08 02:09:07 +08:00
|
|
|
GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
|
2018-05-07 14:21:49 +08:00
|
|
|
GimpContainer *container = gimp_image_get_channels (image);
|
|
|
|
|
2018-05-08 02:09:07 +08:00
|
|
|
if (plug_in)
|
|
|
|
success = gimp_plug_in_cleanup_channels_thaw (plug_in, image);
|
|
|
|
|
|
|
|
if (success)
|
|
|
|
success = gimp_container_frozen (container);
|
|
|
|
|
|
|
|
if (success)
|
2018-05-07 14:21:49 +08:00
|
|
|
gimp_container_thaw (container);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2010-09-06 05:54:23 +08:00
|
|
|
sub image_insert_vectors {
|
|
|
|
$blurb = 'Add the specified vectors to the image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure adds the specified vectors to the image at the given
|
2010-09-15 06:02:28 +08:00
|
|
|
position. Since vectors groups are not currently supported, the parent
|
2011-03-02 00:09:56 +08:00
|
|
|
argument must always be 0. The position argument specifies the
|
2010-09-15 06:02:28 +08:00
|
|
|
location of the vectors inside the stack, starting from the top (0) and
|
|
|
|
increasing. If the position is specified as -1, then the vectors is
|
|
|
|
inserted above the active vectors.
|
2010-09-06 05:54:23 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'vectors', type => 'vectors',
|
|
|
|
desc => 'The vectors' },
|
|
|
|
{ name => 'parent', type => 'vectors', none_ok => 1,
|
2010-09-06 05:54:23 +08:00
|
|
|
desc => 'The parent vectors' },
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'position', type => 'int32',
|
|
|
|
desc => 'The vectors position' }
|
2010-09-06 05:54:23 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
$invoke{code} = <<'CODE';
|
|
|
|
{
|
|
|
|
if (gimp_pdb_item_is_floating (GIMP_ITEM (vectors), image, error) &&
|
|
|
|
(parent == NULL ||
|
2012-11-09 03:46:18 +08:00
|
|
|
(gimp_pdb_item_is_in_tree (GIMP_ITEM (parent), image, 0, error) &&
|
2010-09-06 05:54:23 +08:00
|
|
|
gimp_pdb_item_is_group (GIMP_ITEM (parent), error))))
|
|
|
|
{
|
|
|
|
if (position == -1 && parent == NULL)
|
|
|
|
parent = GIMP_IMAGE_ACTIVE_PARENT;
|
|
|
|
|
|
|
|
success = gimp_image_add_vectors (image, vectors,
|
|
|
|
parent, MAX (position, -1), TRUE);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
}
|
|
|
|
|
2005-12-29 05:24:12 +08:00
|
|
|
sub image_remove_vectors {
|
|
|
|
$blurb = 'Remove the specified path from the image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure removes the specified path from the image. If the path
|
|
|
|
doesn't exist, an error is returned.
|
|
|
|
HELP
|
|
|
|
|
2006-03-15 05:35:50 +08:00
|
|
|
&simon_pdb_misc('2005', '2.4');
|
2005-12-29 05:24:12 +08:00
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'vectors', type => 'vectors',
|
|
|
|
desc => 'The vectors object' }
|
2005-12-29 05:24:12 +08:00
|
|
|
);
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2012-11-09 03:46:18 +08:00
|
|
|
if (gimp_pdb_item_is_attached (GIMP_ITEM (vectors), image, 0, error))
|
2008-10-10 03:40:41 +08:00
|
|
|
gimp_image_remove_vectors (image, vectors, TRUE, NULL);
|
2008-09-16 04:45:42 +08:00
|
|
|
else
|
|
|
|
success = FALSE;
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
2005-12-29 05:24:12 +08:00
|
|
|
}
|
|
|
|
|
2018-05-07 14:21:49 +08:00
|
|
|
sub image_freeze_vectors {
|
|
|
|
$blurb = "Freeze the image's vectors list.";
|
|
|
|
|
2018-05-30 01:22:12 +08:00
|
|
|
&ell_pdb_misc('2018', '2.10.2');
|
2018-05-07 14:21:49 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
2018-05-13 00:13:12 +08:00
|
|
|
This procedure freezes the vectors list of the image, suppressing any
|
2018-05-07 14:21:49 +08:00
|
|
|
updates to the Paths dialog in response to changes to the image's
|
|
|
|
vectors. This can significantly improve performance while applying
|
|
|
|
changes affecting the vectors list.
|
|
|
|
|
|
|
|
|
|
|
|
Each call to gimp_image_freeze_vectors() should be matched by a
|
|
|
|
corresponding call to gimp_image_thaw_vectors(), undoing its
|
|
|
|
effects.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
2018-05-08 02:09:07 +08:00
|
|
|
GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
|
2018-05-07 14:21:49 +08:00
|
|
|
GimpContainer *container = gimp_image_get_vectors (image);
|
|
|
|
|
2018-05-08 02:09:07 +08:00
|
|
|
if (plug_in)
|
|
|
|
success = gimp_plug_in_cleanup_vectors_freeze (plug_in, image);
|
|
|
|
|
|
|
|
if (success)
|
|
|
|
gimp_container_freeze (container);
|
2018-05-07 14:21:49 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_thaw_vectors {
|
|
|
|
$blurb = "Thaw the image's vectors list.";
|
|
|
|
|
2018-05-30 01:22:12 +08:00
|
|
|
&ell_pdb_misc('2018', '2.10.2');
|
2018-05-07 14:21:49 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure thaws the vectors list of the image, re-enabling
|
|
|
|
updates to the Paths dialog.
|
|
|
|
|
|
|
|
|
|
|
|
This procedure should match a corresponding call to
|
|
|
|
gimp_image_freeze_vectors().
|
|
|
|
HELP
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
2018-05-08 02:09:07 +08:00
|
|
|
GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
|
2018-05-07 14:21:49 +08:00
|
|
|
GimpContainer *container = gimp_image_get_vectors (image);
|
|
|
|
|
2018-05-08 02:09:07 +08:00
|
|
|
if (plug_in)
|
|
|
|
success = gimp_plug_in_cleanup_vectors_thaw (plug_in, image);
|
|
|
|
|
|
|
|
if (success)
|
|
|
|
success = gimp_container_frozen (container);
|
|
|
|
|
|
|
|
if (success)
|
2018-05-07 14:21:49 +08:00
|
|
|
gimp_container_thaw (container);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2003-12-09 02:30:54 +08:00
|
|
|
sub image_get_active_drawable {
|
1999-04-27 12:33:41 +08:00
|
|
|
$blurb = "Get the image's active drawable";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the ID of the image's active drawable. This can be
|
|
|
|
either a layer, a channel, or a layer mask. The active drawable is specified by
|
|
|
|
the active image channel. If that is -1, then by the active image layer. If the
|
|
|
|
active image layer has a layer mask and the layer mask is in edit mode, then
|
|
|
|
the layer mask is the active drawable.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'drawable', type => 'drawable',
|
|
|
|
desc => 'The active drawable' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2007-07-19 22:59:51 +08:00
|
|
|
drawable = gimp_image_get_active_drawable (image);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
1999-04-27 12:33:41 +08:00
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2021-04-06 06:47:07 +08:00
|
|
|
sub image_get_base_type {
|
1999-04-27 12:33:41 +08:00
|
|
|
$blurb = 'Get the base type of the image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the image's base type. Layers in the image must be of
|
|
|
|
this subtype, but can have an optional alpha channel.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'base_type', type => 'enum GimpImageBaseType',
|
|
|
|
desc => "The image's base type" }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2012-05-08 03:57:33 +08:00
|
|
|
base_type = gimp_image_get_base_type (image);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
|
2012-04-26 02:51:29 +08:00
|
|
|
sub image_get_precision {
|
|
|
|
$blurb = 'Get the precision of the image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the image's precision.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&mitch_pdb_misc('2012', '2.10');
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
|
|
|
{ name => 'precision', type => 'enum GimpPrecision',
|
|
|
|
desc => "The image's precision" }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
|
|
|
precision = gimp_image_get_precision (image);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2017-08-22 02:04:25 +08:00
|
|
|
sub image_get_default_new_layer_mode {
|
|
|
|
$blurb = 'Get the default mode for newly created layers of this image.';
|
|
|
|
$help = 'Returns the default mode for newly created layers of this image.';
|
|
|
|
|
|
|
|
&mitch_pdb_misc('2017', '2.10');
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
|
|
|
{ name => 'mode', type => 'enum GimpLayerMode',
|
|
|
|
default => 'GIMP_LAYER_MODE_NORMAL',
|
|
|
|
desc => 'The layer mode' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
|
|
|
mode = gimp_image_get_default_new_layer_mode (image);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2004-11-02 19:30:49 +08:00
|
|
|
sub image_get_colormap {
|
1999-04-27 12:33:41 +08:00
|
|
|
$blurb = "Returns the image's colormap";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns an actual pointer to the image's colormap, as well as
|
|
|
|
the number of bytes contained in the colormap. The actual number of colors in
|
2006-09-14 01:56:40 +08:00
|
|
|
the transmitted colormap will be 'num-bytes' / 3. If the image is not in
|
2006-05-19 21:39:12 +08:00
|
|
|
Indexed color mode, no colormap is returned.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
2019-08-08 01:09:00 +08:00
|
|
|
$lib_private = 1;
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
@outargs = (
|
2019-08-08 01:09:00 +08:00
|
|
|
{ name => 'colormap', type => 'int8array',
|
2019-08-05 04:09:04 +08:00
|
|
|
desc => "The image's colormap.",
|
2011-08-13 02:18:45 +08:00
|
|
|
array => { name => 'num_bytes',
|
|
|
|
desc => 'Number of bytes in the colormap array' } }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
headers => [ qw("core/gimpimage-colormap.h") ],
|
|
|
|
code => <<'CODE'
|
1999-04-27 12:33:41 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
num_bytes = 3 * gimp_image_get_colormap_size (image);
|
2019-11-08 17:50:32 +08:00
|
|
|
colormap = gimp_image_get_colormap (image);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2004-11-02 19:30:49 +08:00
|
|
|
sub image_set_colormap {
|
1999-04-27 12:33:41 +08:00
|
|
|
$blurb = "Sets the entries in the image's colormap.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure sets the entries in the specified image's colormap. The number
|
2006-09-14 01:56:40 +08:00
|
|
|
of entries is specified by the 'num-bytes' parameter and corresponds to the
|
|
|
|
number of INT8 triples that must be contained in the 'colormap' array. The
|
|
|
|
actual number of colors in the transmitted colormap is 'num-bytes' / 3.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
2019-08-08 01:09:00 +08:00
|
|
|
$lib_private = 1;
|
|
|
|
|
1999-04-27 12:33:41 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
2019-08-08 01:09:00 +08:00
|
|
|
{ name => 'colormap', type => 'int8array',
|
2011-08-13 02:18:45 +08:00
|
|
|
desc => 'The new colormap values',
|
|
|
|
array => { name => 'num_bytes', type => '0 <= int32 <= 768',
|
|
|
|
desc => 'Number of bytes in the colormap array' } }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
2003-03-18 21:49:02 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
headers => [ qw("core/gimpimage-colormap.h") ],
|
2006-03-17 21:38:06 +08:00
|
|
|
code => <<'CODE'
|
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
gimp_image_set_colormap (image, colormap, num_bytes / 3, TRUE);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
|
2013-10-20 00:38:01 +08:00
|
|
|
sub image_get_metadata {
|
|
|
|
$blurb = "Returns the image's metadata.";
|
|
|
|
$help = 'Returns exif/iptc/xmp metadata from the image.';
|
|
|
|
|
|
|
|
&std_pdb_misc('2013', '2.10');
|
|
|
|
|
2019-08-08 01:09:00 +08:00
|
|
|
$lib_private = 1;
|
|
|
|
|
2013-10-20 00:38:01 +08:00
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2019-08-08 01:09:00 +08:00
|
|
|
{ name => 'metadata_string', type => 'string',
|
2013-10-20 00:38:01 +08:00
|
|
|
desc => 'The exif/ptc/xmp metadata as a string'}
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
|
|
|
GimpMetadata *metadata = gimp_image_get_metadata (image);
|
|
|
|
|
|
|
|
if (metadata)
|
|
|
|
metadata_string = gimp_metadata_serialize (metadata);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_set_metadata {
|
|
|
|
$blurb = "Set the image's metadata.";
|
|
|
|
$help = 'Sets exif/iptc/xmp metadata on the image.';
|
|
|
|
|
|
|
|
&std_pdb_misc('2013', '2.10');
|
|
|
|
|
2019-08-08 01:09:00 +08:00
|
|
|
$lib_private = 1;
|
|
|
|
|
2013-10-20 00:38:01 +08:00
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
2019-08-08 01:09:00 +08:00
|
|
|
{ name => 'metadata_string', type => 'string',
|
2013-10-20 00:38:01 +08:00
|
|
|
desc => 'The exif/ptc/xmp metadata as a string' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
|
|
|
GimpMetadata *metadata = gimp_metadata_deserialize (metadata_string);
|
|
|
|
|
|
|
|
gimp_image_set_metadata (image, metadata, TRUE);
|
|
|
|
|
|
|
|
if (metadata)
|
|
|
|
g_object_unref (metadata);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
1999-04-27 12:33:41 +08:00
|
|
|
sub image_clean_all {
|
|
|
|
$blurb = 'Set the image dirty count to 0.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2005-10-29 08:23:14 +08:00
|
|
|
This procedure sets the specified image's dirty count to 0, allowing
|
|
|
|
operations to occur without having a 'dirtied' image. This is
|
|
|
|
especially useful for creating and loading images which should not
|
|
|
|
initially be considered dirty, even though layers must be created,
|
|
|
|
filled, and installed in the image. Note that save plug-ins must NOT
|
|
|
|
call this function themselves after saving the image.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
gimp_image_clean_all (image);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
|
2002-12-13 21:12:03 +08:00
|
|
|
sub image_is_dirty {
|
|
|
|
$blurb = 'Checks if the image has unsaved changes.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2005-10-29 08:23:14 +08:00
|
|
|
This procedure checks the specified image's dirty count to see if it
|
|
|
|
needs to be saved. Note that saving the image does not automatically
|
2006-06-14 16:32:08 +08:00
|
|
|
set the dirty count to 0, you need to call gimp_image_clean_all() after
|
2005-10-29 08:23:14 +08:00
|
|
|
calling a save procedure to make the image clean.
|
2002-12-13 21:12:03 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
2002-12-13 21:12:03 +08:00
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'dirty', type => 'boolean',
|
|
|
|
desc => 'TRUE if the image has unsaved changes.' }
|
2002-12-13 21:12:03 +08:00
|
|
|
);
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2009-07-04 03:11:21 +08:00
|
|
|
dirty = gimp_image_is_dirty (image);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
2002-12-13 21:12:03 +08:00
|
|
|
}
|
|
|
|
|
2003-12-06 00:30:01 +08:00
|
|
|
sub image_get_floating_sel {
|
1999-04-27 12:33:41 +08:00
|
|
|
$blurb = 'Return the floating selection of the image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2003-12-06 00:30:01 +08:00
|
|
|
This procedure returns the image's floating selection, if it exists.
|
|
|
|
If it doesn't exist, -1 is returned as the layer ID.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'floating_sel', type => 'layer',
|
|
|
|
desc => "The image's floating selection" }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2008-11-14 23:01:44 +08:00
|
|
|
floating_sel = gimp_image_get_floating_selection (image);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
sub image_floating_sel_attached_to {
|
|
|
|
$blurb = 'Return the drawable the floating selection is attached to.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the drawable the image's floating selection is attached
|
|
|
|
to, if it exists. If it doesn't exist, -1 is returned as the drawable ID.
|
|
|
|
HELP
|
|
|
|
|
2006-03-15 05:35:50 +08:00
|
|
|
&wolfgang_pdb_misc('1998');
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'drawable', type => 'drawable',
|
|
|
|
desc => 'The drawable the floating selection is attached to' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
1999-04-27 12:33:41 +08:00
|
|
|
{
|
2008-11-14 23:01:44 +08:00
|
|
|
GimpLayer *floating_sel = gimp_image_get_floating_selection (image);
|
1999-06-18 17:16:33 +08:00
|
|
|
|
|
|
|
if (floating_sel)
|
2009-01-27 06:47:16 +08:00
|
|
|
drawable = gimp_layer_get_floating_sel_drawable (floating_sel);
|
1999-06-18 17:16:33 +08:00
|
|
|
else
|
|
|
|
drawable = NULL;
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2021-04-06 06:47:07 +08:00
|
|
|
sub image_get_width {
|
2006-03-17 00:54:58 +08:00
|
|
|
$blurb = 'Return the width of the image';
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 00:54:58 +08:00
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the image's width. This value is independent of any of
|
|
|
|
the layers in this image. This is the "canvas" width.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
2006-03-17 00:54:58 +08:00
|
|
|
&std_pdb_misc;
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 00:54:58 +08:00
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'width', type => 'int32',
|
|
|
|
desc => "The image's width" }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
2006-03-17 00:54:58 +08:00
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 00:54:58 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
width = gimp_image_get_width (image);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
2006-03-17 00:54:58 +08:00
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2021-04-06 06:47:07 +08:00
|
|
|
sub image_get_height {
|
2006-03-17 00:54:58 +08:00
|
|
|
$blurb = 'Return the height of the image';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the image's height. This value is independent of any of
|
|
|
|
the layers in this image. This is the "canvas" height.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
2006-03-17 00:54:58 +08:00
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'height', type => 'int32',
|
|
|
|
desc => "The image's height" }
|
2006-03-17 00:54:58 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 00:54:58 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
height = gimp_image_get_height (image);
|
2006-03-17 00:54:58 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
|
2020-04-09 21:47:16 +08:00
|
|
|
sub image_get_selected_layers {
|
|
|
|
$blurb = "Returns the specified image's selected layers.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the list of selected layers in the specified image.
|
|
|
|
HELP
|
|
|
|
|
2021-02-22 06:17:30 +08:00
|
|
|
&jehan_pdb_misc('2020', '3.0.0');
|
2020-04-09 21:47:16 +08:00
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
|
|
|
{ name => 'layers', type => 'layerarray',
|
|
|
|
desc => 'The list of selected layers in the image.',
|
|
|
|
array => { name => 'num_layers',
|
|
|
|
desc => 'The number of selected layers in the image' } }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
|
|
|
GList *list = gimp_image_get_selected_layers (image);
|
|
|
|
|
|
|
|
num_layers = g_list_length (list);
|
|
|
|
|
|
|
|
if (num_layers)
|
|
|
|
{
|
|
|
|
gint i;
|
|
|
|
|
|
|
|
layers = g_new (GimpLayer *, num_layers);
|
|
|
|
|
|
|
|
for (i = 0; i < num_layers; i++, list = g_list_next (list))
|
|
|
|
layers[i] = g_object_ref (list->data);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
sub image_get_active_layer {
|
|
|
|
$blurb = "Returns the specified image's active layer.";
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
If there is an active layer, its ID will be returned, otherwise, -1. If a
|
|
|
|
channel is currently active, then no layer will be. If a layer mask is active,
|
|
|
|
then this will return the associated layer.
|
|
|
|
HELP
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'active_layer', type => 'layer',
|
|
|
|
desc => 'The active layer' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
active_layer = gimp_image_get_active_layer (image);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2021-02-22 06:17:30 +08:00
|
|
|
sub image_set_selected_layers {
|
|
|
|
$blurb = "Sets the specified image's selected layers.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
The layers are set as the selected layers in the image. Any previous
|
|
|
|
selected layers or channels are unselected. An exception is a previously
|
|
|
|
existing floating selection, in which case this procedure will return an
|
|
|
|
execution error.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&jehan_pdb_misc('2021', '3.0.0');
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'layers', type => 'layerarray',
|
|
|
|
desc => 'The list of layers to select',
|
|
|
|
no_validate => 1,
|
|
|
|
array => { name => 'num_layers',
|
|
|
|
type => '0 <= int32',
|
|
|
|
desc => 'The number of layers to select' } }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
|
|
|
GList *selected_layers = NULL;
|
|
|
|
gint i;
|
|
|
|
|
|
|
|
for (i = 0; i < num_layers; i++)
|
|
|
|
selected_layers = g_list_prepend (selected_layers,
|
|
|
|
GIMP_LAYER (layers[i]));
|
|
|
|
|
|
|
|
gimp_image_set_selected_layers (image, selected_layers);
|
|
|
|
g_list_free (selected_layers);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
sub image_set_active_layer {
|
|
|
|
$blurb = "Sets the specified image's active layer.";
|
don't allow to select anything but the floating selection. Fixes bug
2004-01-18 Michael Natterer <mitch@gimp.org>
* app/core/gimpimage.c (gimp_image_set_active_layer): don't allow
to select anything but the floating selection. Fixes bug #128025.
(gimp_image_set_active_layer,channel,vectors): allow to pass NULL
to unselect the active item. Removed the silly feature that
passing some random item of another image would select the first
item in the list (was unused anyway).
(gimp_image_unset_active_channel): use gimp_image_set_active_channel()
now that it accepts NULL.
(gimp_image_add_layer,channel,vectors): cleaned up / simplified.
(gimp_image_remove_layer,channel,vectors): cleanup,
simplification, use gimp_image_set_active_layer,channel,vectors()
now that they accept NULL, make sure the item next to the removed
item becomes the active one (and not the first in the list, which
was a severe usability problem in the dialogs).
* app/core/gimpimage-undo-push.c (undo_pop_layer,channel): pass
NULL to the set_active functions, cleanup.
* app/core/gimpimage-duplicate.c: attach the floating selection
before setting the active layer. Code relied on broken
gimp_image_set_active_layer() behaviour before.
* app/core/gimplayer-floating-sel.c: no need to set
gimage->floating_sel before calling gimp_image_add_layer(). The
weird GUI mentioned in the comment existed in 1.2 only.
* app/display/gimpdisplayshell-layer-select.c (layer_select_advance):
don't assume that setting the active_layer always succeeds.
* tools/pdbgen/pdb/image.pdb: behave as the documentation says
and return an execution error if setting the active layer or
channel failed.
Unrelated:
* tools/pdbgen/pdb/image.pdb
* tools/pdbgen/pdb/layer.pdb: removed leftover cruft from the old
guchar based color API.
* tools/pdbgen/pdb/channel.pdb: simplified code which handles the
channel's color.
* app/pdb/channel_cmds.c
* app/pdb/image_cmds.c: regenerated.
2004-01-18 20:16:44 +08:00
|
|
|
|
1999-04-27 12:33:41 +08:00
|
|
|
$help = <<'HELP';
|
don't allow to select anything but the floating selection. Fixes bug
2004-01-18 Michael Natterer <mitch@gimp.org>
* app/core/gimpimage.c (gimp_image_set_active_layer): don't allow
to select anything but the floating selection. Fixes bug #128025.
(gimp_image_set_active_layer,channel,vectors): allow to pass NULL
to unselect the active item. Removed the silly feature that
passing some random item of another image would select the first
item in the list (was unused anyway).
(gimp_image_unset_active_channel): use gimp_image_set_active_channel()
now that it accepts NULL.
(gimp_image_add_layer,channel,vectors): cleaned up / simplified.
(gimp_image_remove_layer,channel,vectors): cleanup,
simplification, use gimp_image_set_active_layer,channel,vectors()
now that they accept NULL, make sure the item next to the removed
item becomes the active one (and not the first in the list, which
was a severe usability problem in the dialogs).
* app/core/gimpimage-undo-push.c (undo_pop_layer,channel): pass
NULL to the set_active functions, cleanup.
* app/core/gimpimage-duplicate.c: attach the floating selection
before setting the active layer. Code relied on broken
gimp_image_set_active_layer() behaviour before.
* app/core/gimplayer-floating-sel.c: no need to set
gimage->floating_sel before calling gimp_image_add_layer(). The
weird GUI mentioned in the comment existed in 1.2 only.
* app/display/gimpdisplayshell-layer-select.c (layer_select_advance):
don't assume that setting the active_layer always succeeds.
* tools/pdbgen/pdb/image.pdb: behave as the documentation says
and return an execution error if setting the active layer or
channel failed.
Unrelated:
* tools/pdbgen/pdb/image.pdb
* tools/pdbgen/pdb/layer.pdb: removed leftover cruft from the old
guchar based color API.
* tools/pdbgen/pdb/channel.pdb: simplified code which handles the
channel's color.
* app/pdb/channel_cmds.c
* app/pdb/image_cmds.c: regenerated.
2004-01-18 20:16:44 +08:00
|
|
|
If the layer exists, it is set as the active layer in the image. Any
|
|
|
|
previous active layer or channel is set to inactive. An exception is a
|
|
|
|
previously existing floating selection, in which case this procedure
|
|
|
|
will return an execution error.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'active_layer', type => 'layer',
|
|
|
|
desc => 'The new image active layer' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
if (gimp_image_set_active_layer (image, active_layer) != active_layer)
|
2006-03-17 21:38:06 +08:00
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_get_active_channel {
|
|
|
|
$blurb = "Returns the specified image's active channel.";
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
If there is an active channel, this will return the channel ID, otherwise, -1.
|
|
|
|
HELP
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'active_channel', type => 'channel',
|
|
|
|
desc => 'The active channel' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
active_channel = gimp_image_get_active_channel (image);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_set_active_channel {
|
|
|
|
$blurb = "Sets the specified image's active channel.";
|
don't allow to select anything but the floating selection. Fixes bug
2004-01-18 Michael Natterer <mitch@gimp.org>
* app/core/gimpimage.c (gimp_image_set_active_layer): don't allow
to select anything but the floating selection. Fixes bug #128025.
(gimp_image_set_active_layer,channel,vectors): allow to pass NULL
to unselect the active item. Removed the silly feature that
passing some random item of another image would select the first
item in the list (was unused anyway).
(gimp_image_unset_active_channel): use gimp_image_set_active_channel()
now that it accepts NULL.
(gimp_image_add_layer,channel,vectors): cleaned up / simplified.
(gimp_image_remove_layer,channel,vectors): cleanup,
simplification, use gimp_image_set_active_layer,channel,vectors()
now that they accept NULL, make sure the item next to the removed
item becomes the active one (and not the first in the list, which
was a severe usability problem in the dialogs).
* app/core/gimpimage-undo-push.c (undo_pop_layer,channel): pass
NULL to the set_active functions, cleanup.
* app/core/gimpimage-duplicate.c: attach the floating selection
before setting the active layer. Code relied on broken
gimp_image_set_active_layer() behaviour before.
* app/core/gimplayer-floating-sel.c: no need to set
gimage->floating_sel before calling gimp_image_add_layer(). The
weird GUI mentioned in the comment existed in 1.2 only.
* app/display/gimpdisplayshell-layer-select.c (layer_select_advance):
don't assume that setting the active_layer always succeeds.
* tools/pdbgen/pdb/image.pdb: behave as the documentation says
and return an execution error if setting the active layer or
channel failed.
Unrelated:
* tools/pdbgen/pdb/image.pdb
* tools/pdbgen/pdb/layer.pdb: removed leftover cruft from the old
guchar based color API.
* tools/pdbgen/pdb/channel.pdb: simplified code which handles the
channel's color.
* app/pdb/channel_cmds.c
* app/pdb/image_cmds.c: regenerated.
2004-01-18 20:16:44 +08:00
|
|
|
|
1999-04-27 12:33:41 +08:00
|
|
|
$help = <<'HELP';
|
don't allow to select anything but the floating selection. Fixes bug
2004-01-18 Michael Natterer <mitch@gimp.org>
* app/core/gimpimage.c (gimp_image_set_active_layer): don't allow
to select anything but the floating selection. Fixes bug #128025.
(gimp_image_set_active_layer,channel,vectors): allow to pass NULL
to unselect the active item. Removed the silly feature that
passing some random item of another image would select the first
item in the list (was unused anyway).
(gimp_image_unset_active_channel): use gimp_image_set_active_channel()
now that it accepts NULL.
(gimp_image_add_layer,channel,vectors): cleaned up / simplified.
(gimp_image_remove_layer,channel,vectors): cleanup,
simplification, use gimp_image_set_active_layer,channel,vectors()
now that they accept NULL, make sure the item next to the removed
item becomes the active one (and not the first in the list, which
was a severe usability problem in the dialogs).
* app/core/gimpimage-undo-push.c (undo_pop_layer,channel): pass
NULL to the set_active functions, cleanup.
* app/core/gimpimage-duplicate.c: attach the floating selection
before setting the active layer. Code relied on broken
gimp_image_set_active_layer() behaviour before.
* app/core/gimplayer-floating-sel.c: no need to set
gimage->floating_sel before calling gimp_image_add_layer(). The
weird GUI mentioned in the comment existed in 1.2 only.
* app/display/gimpdisplayshell-layer-select.c (layer_select_advance):
don't assume that setting the active_layer always succeeds.
* tools/pdbgen/pdb/image.pdb: behave as the documentation says
and return an execution error if setting the active layer or
channel failed.
Unrelated:
* tools/pdbgen/pdb/image.pdb
* tools/pdbgen/pdb/layer.pdb: removed leftover cruft from the old
guchar based color API.
* tools/pdbgen/pdb/channel.pdb: simplified code which handles the
channel's color.
* app/pdb/channel_cmds.c
* app/pdb/image_cmds.c: regenerated.
2004-01-18 20:16:44 +08:00
|
|
|
If the channel exists, it is set as the active channel in the
|
2013-09-13 18:18:24 +08:00
|
|
|
image. Any previous active channel or layer is set to inactive. An
|
don't allow to select anything but the floating selection. Fixes bug
2004-01-18 Michael Natterer <mitch@gimp.org>
* app/core/gimpimage.c (gimp_image_set_active_layer): don't allow
to select anything but the floating selection. Fixes bug #128025.
(gimp_image_set_active_layer,channel,vectors): allow to pass NULL
to unselect the active item. Removed the silly feature that
passing some random item of another image would select the first
item in the list (was unused anyway).
(gimp_image_unset_active_channel): use gimp_image_set_active_channel()
now that it accepts NULL.
(gimp_image_add_layer,channel,vectors): cleaned up / simplified.
(gimp_image_remove_layer,channel,vectors): cleanup,
simplification, use gimp_image_set_active_layer,channel,vectors()
now that they accept NULL, make sure the item next to the removed
item becomes the active one (and not the first in the list, which
was a severe usability problem in the dialogs).
* app/core/gimpimage-undo-push.c (undo_pop_layer,channel): pass
NULL to the set_active functions, cleanup.
* app/core/gimpimage-duplicate.c: attach the floating selection
before setting the active layer. Code relied on broken
gimp_image_set_active_layer() behaviour before.
* app/core/gimplayer-floating-sel.c: no need to set
gimage->floating_sel before calling gimp_image_add_layer(). The
weird GUI mentioned in the comment existed in 1.2 only.
* app/display/gimpdisplayshell-layer-select.c (layer_select_advance):
don't assume that setting the active_layer always succeeds.
* tools/pdbgen/pdb/image.pdb: behave as the documentation says
and return an execution error if setting the active layer or
channel failed.
Unrelated:
* tools/pdbgen/pdb/image.pdb
* tools/pdbgen/pdb/layer.pdb: removed leftover cruft from the old
guchar based color API.
* tools/pdbgen/pdb/channel.pdb: simplified code which handles the
channel's color.
* app/pdb/channel_cmds.c
* app/pdb/image_cmds.c: regenerated.
2004-01-18 20:16:44 +08:00
|
|
|
exception is a previously existing floating selection, in which case
|
|
|
|
this procedure will return an execution error.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
&std_pdb_misc;
|
2005-12-29 05:24:12 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'active_channel', type => 'channel',
|
|
|
|
desc => 'The new image active channel' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
2005-12-29 05:24:12 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
if (gimp_image_set_active_channel (image, active_channel) != active_channel)
|
2006-03-17 21:38:06 +08:00
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
2005-12-29 05:24:12 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
sub image_get_active_vectors {
|
|
|
|
$blurb = "Returns the specified image's active vectors.";
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
2006-03-17 21:38:06 +08:00
|
|
|
If there is an active path, its ID will be returned, otherwise, -1.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'active_vectors', type => 'vectors',
|
|
|
|
desc => 'The active vectors' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
1999-04-27 12:33:41 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
active_vectors = gimp_image_get_active_vectors (image);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
CODE
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
}
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
sub image_set_active_vectors {
|
|
|
|
$blurb = "Sets the specified image's active vectors.";
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
$help = <<'HELP';
|
|
|
|
If the path exists, it is set as the active path in the image.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'active_vectors', type => 'vectors',
|
|
|
|
desc => 'The new image active vectors' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
if (gimp_image_set_active_vectors (image, active_vectors) != active_vectors)
|
2006-03-17 21:38:06 +08:00
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_get_selection {
|
|
|
|
$blurb = "Returns the specified image's selection.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This will always return a valid ID for a selection -- which is represented as a
|
|
|
|
channel internally.
|
|
|
|
HELP
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
&std_pdb_misc;
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'selection', type => 'selection',
|
|
|
|
desc => 'The selection channel' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-04-04 04:54:55 +08:00
|
|
|
selection = GIMP_SELECTION (gimp_image_get_mask (image));
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
if (! selection)
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_get_component_active {
|
|
|
|
$blurb = "Returns if the specified image's image component is active.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns if the specified image's image component
|
|
|
|
(i.e. Red, Green, Blue intensity channels in an RGB image) is active
|
|
|
|
or inactive -- whether or not it can be modified. If the specified
|
|
|
|
component is not valid for the image type, an error is returned.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'component', type => 'enum GimpChannelType',
|
|
|
|
desc => 'The image component' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'active', type => 'boolean',
|
|
|
|
desc => 'Component is active' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2017-01-10 02:40:30 +08:00
|
|
|
if (component == GIMP_CHANNEL_GRAY)
|
2008-04-04 15:11:13 +08:00
|
|
|
success = gimp_pdb_image_is_base_type (image, GIMP_GRAY, error);
|
2017-01-10 02:40:30 +08:00
|
|
|
else if (component == GIMP_CHANNEL_INDEXED)
|
2008-04-04 15:11:13 +08:00
|
|
|
success = gimp_pdb_image_is_base_type (image, GIMP_INDEXED, error);
|
2006-03-17 21:38:06 +08:00
|
|
|
else
|
2008-04-04 15:11:13 +08:00
|
|
|
success = gimp_pdb_image_is_base_type (image, GIMP_RGB, error);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
if (success)
|
2006-03-24 05:17:16 +08:00
|
|
|
active = gimp_image_get_component_active (image, component);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_set_component_active {
|
|
|
|
$blurb = "Sets if the specified image's image component is active.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure sets if the specified image's image component
|
|
|
|
(i.e. Red, Green, Blue intensity channels in an RGB image) is active
|
|
|
|
or inactive -- whether or not it can be modified. If the specified
|
|
|
|
component is not valid for the image type, an error is returned.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'component', type => 'enum GimpChannelType',
|
|
|
|
desc => 'The image component' },
|
|
|
|
{ name => 'active', type => 'boolean',
|
|
|
|
desc => 'Component is active' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2017-01-10 02:40:30 +08:00
|
|
|
if (component == GIMP_CHANNEL_GRAY)
|
2008-04-04 15:11:13 +08:00
|
|
|
success = gimp_pdb_image_is_base_type (image, GIMP_GRAY, error);
|
2017-01-10 02:40:30 +08:00
|
|
|
else if (component == GIMP_CHANNEL_INDEXED)
|
2008-04-04 15:11:13 +08:00
|
|
|
success = gimp_pdb_image_is_base_type (image, GIMP_INDEXED, error);
|
2006-03-17 21:38:06 +08:00
|
|
|
else
|
2008-04-04 15:11:13 +08:00
|
|
|
success = gimp_pdb_image_is_base_type (image, GIMP_RGB, error);
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
if (success)
|
2006-03-24 05:17:16 +08:00
|
|
|
gimp_image_set_component_active (image, component, active);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_get_component_visible {
|
|
|
|
$blurb = "Returns if the specified image's image component is visible.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns if the specified image's image component
|
|
|
|
(i.e. Red, Green, Blue intensity channels in an RGB image) is visible
|
|
|
|
or invisible -- whether or not it can be seen. If the specified
|
|
|
|
component is not valid for the image type, an error is returned.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'component', type => 'enum GimpChannelType',
|
|
|
|
desc => 'The image component' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'visible', type => 'boolean',
|
|
|
|
desc => 'Component is visible' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2017-01-10 02:40:30 +08:00
|
|
|
if (component == GIMP_CHANNEL_GRAY)
|
2008-04-04 15:11:13 +08:00
|
|
|
success = gimp_pdb_image_is_base_type (image, GIMP_GRAY, error);
|
2017-01-10 02:40:30 +08:00
|
|
|
else if (component == GIMP_CHANNEL_INDEXED)
|
2008-04-04 15:11:13 +08:00
|
|
|
success = gimp_pdb_image_is_base_type (image, GIMP_INDEXED, error);
|
2006-03-17 21:38:06 +08:00
|
|
|
else
|
2008-04-04 15:11:13 +08:00
|
|
|
success = gimp_pdb_image_is_base_type (image, GIMP_RGB, error);
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
if (success)
|
2006-03-24 05:17:16 +08:00
|
|
|
visible = gimp_image_get_component_visible (image, component);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_set_component_visible {
|
|
|
|
$blurb = "Sets if the specified image's image component is visible.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure sets if the specified image's image component
|
|
|
|
(i.e. Red, Green, Blue intensity channels in an RGB image) is visible
|
|
|
|
or invisible -- whether or not it can be seen. If the specified
|
|
|
|
component is not valid for the image type, an error is returned.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'component', type => 'enum GimpChannelType',
|
|
|
|
desc => 'The image component' },
|
|
|
|
{ name => 'visible', type => 'boolean',
|
|
|
|
desc => 'Component is visible' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2017-01-10 02:40:30 +08:00
|
|
|
if (component == GIMP_CHANNEL_GRAY)
|
2008-04-04 15:11:13 +08:00
|
|
|
success = gimp_pdb_image_is_base_type (image, GIMP_GRAY, error);
|
2017-01-10 02:40:30 +08:00
|
|
|
else if (component == GIMP_CHANNEL_INDEXED)
|
2008-04-04 15:11:13 +08:00
|
|
|
success = gimp_pdb_image_is_base_type (image, GIMP_INDEXED, error);
|
2006-03-17 21:38:06 +08:00
|
|
|
else
|
2008-04-04 15:11:13 +08:00
|
|
|
success = gimp_pdb_image_is_base_type (image, GIMP_RGB, error);
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
if (success)
|
2006-03-24 05:17:16 +08:00
|
|
|
gimp_image_set_component_visible (image, component, visible);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2019-09-12 03:48:34 +08:00
|
|
|
sub image_get_file {
|
|
|
|
$blurb = "Returns the file for the specified image.";
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
2019-09-12 03:48:34 +08:00
|
|
|
This procedure returns the file associated with the specified image.
|
|
|
|
The image has a file only if it was loaded or imported from a file or
|
|
|
|
has since been saved or exported. Otherwise, this function returns
|
|
|
|
%NULL. See also gimp-image-get-imported-file to get the
|
|
|
|
current file if it was imported from a non-GIMP file format and not
|
|
|
|
yet saved, or gimp-image-get-exported-file if the image has been
|
|
|
|
exported to a non-GIMP file format.
|
2006-03-17 21:38:06 +08:00
|
|
|
HELP
|
|
|
|
|
2019-09-12 03:48:34 +08:00
|
|
|
&neo_pdb_misc('2009', '2.8');
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2019-09-12 03:48:34 +08:00
|
|
|
{ name => 'file', type => 'file',
|
|
|
|
desc => 'The file.' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2019-09-12 03:48:34 +08:00
|
|
|
file = gimp_image_get_any_file (image);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
1999-04-27 12:33:41 +08:00
|
|
|
CODE
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
|
2019-09-12 03:48:34 +08:00
|
|
|
sub image_set_file {
|
|
|
|
$blurb = "Sets the specified image's file.";
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
2019-09-12 03:48:34 +08:00
|
|
|
This procedure sets the specified image's file.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
&std_pdb_misc;
|
2003-08-20 03:08:11 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
2019-09-12 03:48:34 +08:00
|
|
|
{ name => 'file', type => 'file',
|
|
|
|
desc => 'The new image file' }
|
2009-03-05 03:35:18 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2009-03-05 03:35:18 +08:00
|
|
|
{
|
2019-09-12 03:48:34 +08:00
|
|
|
gimp_image_set_file (image, file);
|
2011-08-13 03:15:16 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2019-09-12 03:48:34 +08:00
|
|
|
sub image_get_xcf_file {
|
|
|
|
$blurb = "Returns the XCF file for the specified image.";
|
2011-08-13 03:15:16 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
2019-09-12 03:48:34 +08:00
|
|
|
This procedure returns the XCF file associated with the image. If
|
|
|
|
there is no such file, this procedure returns %NULL.
|
2011-08-13 03:15:16 +08:00
|
|
|
HELP
|
|
|
|
|
|
|
|
$author = 'Eric Grivel <gimp@lumenssolutions.com>';
|
|
|
|
$copyright = 'Eric Grivel';
|
|
|
|
$date = '2011';
|
|
|
|
$since = '2.8';
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2019-09-12 03:48:34 +08:00
|
|
|
{ name => 'file', type => 'file',
|
|
|
|
desc => 'The imported XCF file.' }
|
2011-08-13 03:15:16 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
2019-09-12 03:48:34 +08:00
|
|
|
file = gimp_image_get_file (image);
|
2009-03-05 03:35:18 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2019-09-12 03:48:34 +08:00
|
|
|
sub image_get_imported_file {
|
|
|
|
$blurb = "Returns the imported file for the specified image.";
|
2011-08-13 03:15:16 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
2019-09-12 03:48:34 +08:00
|
|
|
This procedure returns the file associated with the specified image
|
2011-08-13 03:15:16 +08:00
|
|
|
if the image was imported from a non-native Gimp format. If the
|
|
|
|
image was not imported, or has since been saved in the native Gimp
|
|
|
|
format, this procedure returns %NULL.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
$author = 'Eric Grivel <gimp@lumenssolutions.com>';
|
|
|
|
$copyright = 'Eric Grivel';
|
|
|
|
$date = '2011';
|
|
|
|
$since = '2.8';
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2019-09-12 03:48:34 +08:00
|
|
|
{ name => 'file', type => 'file',
|
|
|
|
desc => 'The imported file.' }
|
2011-08-13 03:15:16 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
2019-09-12 03:48:34 +08:00
|
|
|
file = gimp_image_get_imported_file (image);
|
2011-08-13 03:15:16 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2019-09-12 03:48:34 +08:00
|
|
|
sub image_get_exported_file {
|
|
|
|
$blurb = "Returns the exported file for the specified image.";
|
2011-08-13 03:15:16 +08:00
|
|
|
|
|
|
|
$help = <<'HELP';
|
2019-09-12 03:48:34 +08:00
|
|
|
This procedure returns the file associated with the specified image
|
2011-08-13 03:15:16 +08:00
|
|
|
if the image was exported a non-native GIMP format. If the
|
|
|
|
image was not exported, this procedure returns %NULL.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
$author = 'Eric Grivel <gimp@lumenssolutions.com>';
|
|
|
|
$copyright = 'Eric Grivel';
|
|
|
|
$date = '2011';
|
|
|
|
$since = '2.8';
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2019-09-12 03:48:34 +08:00
|
|
|
{ name => 'file', type => 'file',
|
|
|
|
desc => 'The exported file.' }
|
2011-08-13 03:15:16 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
2019-09-12 03:48:34 +08:00
|
|
|
file = gimp_image_get_exported_file (image);
|
2011-08-13 03:15:16 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
sub image_get_name {
|
|
|
|
$blurb = "Returns the specified image's name.";
|
2009-03-05 02:24:29 +08:00
|
|
|
$help = <<'HELP';
|
2014-03-16 00:50:35 +08:00
|
|
|
This procedure returns the image's name. If the image has a filename
|
|
|
|
or an URI, then the returned name contains the filename's or URI's
|
|
|
|
base name (the last component of the path). Otherwise it is the
|
|
|
|
translated string "Untitled". The returned name is formatted like the
|
|
|
|
image name in the image window title, it may contain '[]',
|
|
|
|
'(imported)' etc. and should only be used to label user interface
|
|
|
|
elements. Never use it to construct filenames.
|
2009-03-05 02:24:29 +08:00
|
|
|
HELP
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
&std_pdb_misc;
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'name', type => 'string',
|
2019-08-05 04:09:04 +08:00
|
|
|
desc => 'The name.' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
2002-05-08 06:35:29 +08:00
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2002-05-08 06:35:29 +08:00
|
|
|
{
|
2014-03-16 00:50:35 +08:00
|
|
|
name = g_strdup (gimp_image_get_display_name (image));
|
2002-05-08 06:35:29 +08:00
|
|
|
}
|
2006-03-17 21:38:06 +08:00
|
|
|
CODE
|
2002-05-08 06:35:29 +08:00
|
|
|
);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
2002-05-08 06:35:29 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
sub image_get_resolution {
|
|
|
|
$blurb = "Returns the specified image's resolution.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2009-03-05 02:24:29 +08:00
|
|
|
This procedure returns the specified image's resolution in dots per inch.
|
2006-03-17 21:38:06 +08:00
|
|
|
This value is independent of any of the layers in this image.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
2006-03-15 05:35:50 +08:00
|
|
|
&austin_pdb_misc('1998');
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'xresolution', type => 'float', void_ret => 1,
|
|
|
|
desc => 'The resolution in the x-axis, in dots per inch' },
|
|
|
|
{ name => 'yresolution', type => 'float',
|
|
|
|
desc => 'The resolution in the y-axis, in dots per inch' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
gimp_image_get_resolution (image, &xresolution, &yresolution);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_set_resolution {
|
|
|
|
$blurb = "Sets the specified image's resolution.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2009-03-05 02:24:29 +08:00
|
|
|
This procedure sets the specified image's resolution in dots per inch.
|
2006-03-17 21:38:06 +08:00
|
|
|
This value is independent of any of the layers in this image.
|
1999-04-27 12:33:41 +08:00
|
|
|
No scaling or resizing is performed.
|
|
|
|
HELP
|
|
|
|
|
2006-03-15 05:35:50 +08:00
|
|
|
&austin_pdb_misc('1998');
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'xresolution', type => 'float',
|
|
|
|
desc => 'The new image resolution in the x-axis, in dots per inch' },
|
|
|
|
{ name => 'yresolution', type => 'float',
|
|
|
|
desc => 'The new image resolution in the y-axis, in dots per inch' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
2000-01-10 15:43:27 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2000-01-10 15:43:27 +08:00
|
|
|
{
|
2020-01-05 23:36:18 +08:00
|
|
|
if (! isfinite (xresolution) ||
|
2000-04-11 17:37:25 +08:00
|
|
|
xresolution < GIMP_MIN_RESOLUTION || xresolution > GIMP_MAX_RESOLUTION ||
|
2020-01-05 23:36:18 +08:00
|
|
|
! isfinite (yresolution) ||
|
2000-04-11 17:37:25 +08:00
|
|
|
yresolution < GIMP_MIN_RESOLUTION || yresolution > GIMP_MAX_RESOLUTION)
|
2000-04-06 09:01:31 +08:00
|
|
|
{
|
2012-03-06 02:36:59 +08:00
|
|
|
g_set_error_literal (error, GIMP_PDB_ERROR,
|
|
|
|
GIMP_PDB_ERROR_INVALID_ARGUMENT,
|
2011-08-13 02:18:45 +08:00
|
|
|
_("Image resolution is out of bounds, "
|
2008-11-04 20:33:09 +08:00
|
|
|
"using the default resolution instead."));
|
2000-04-06 09:01:31 +08:00
|
|
|
success = FALSE;
|
|
|
|
}
|
2000-01-10 15:43:27 +08:00
|
|
|
else
|
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
gimp_image_set_resolution (image, xresolution, yresolution);
|
2000-01-10 15:43:27 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
CODE
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
}
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
sub image_get_unit {
|
|
|
|
$blurb = "Returns the specified image's unit.";
|
2003-12-09 01:26:55 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the specified image's unit. This value is
|
2006-06-14 16:32:08 +08:00
|
|
|
independent of any of the layers in this image. See the gimp_unit_*()
|
2006-03-17 21:38:06 +08:00
|
|
|
procedure definitions for the valid range of unit IDs and a
|
1999-04-27 12:33:41 +08:00
|
|
|
description of the unit system.
|
|
|
|
HELP
|
|
|
|
|
2006-03-15 05:35:50 +08:00
|
|
|
&mitch_pdb_misc('1998');
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'unit', type => 'unit',
|
|
|
|
desc => 'The unit' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
unit = gimp_image_get_unit (image);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_set_unit {
|
|
|
|
$blurb = "Sets the specified image's unit.";
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure sets the specified image's unit. No scaling or resizing
|
|
|
|
is performed. This value is independent of any of the layers in this
|
2006-06-14 16:32:08 +08:00
|
|
|
image. See the gimp_unit_*() procedure definitions for the valid range
|
2006-03-17 21:38:06 +08:00
|
|
|
of unit IDs and a description of the unit system.
|
|
|
|
HELP
|
|
|
|
|
2006-03-15 05:35:50 +08:00
|
|
|
&mitch_pdb_misc('1998');
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'unit', type => 'unit (min GIMP_UNIT_INCH)',
|
|
|
|
desc => 'The new image unit' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
gimp_image_set_unit (image, unit);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_get_tattoo_state {
|
|
|
|
$blurb = 'Returns the tattoo state associated with the image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2003-12-09 01:26:55 +08:00
|
|
|
This procedure returns the tattoo state of the image. Use only by
|
2017-04-04 19:09:42 +08:00
|
|
|
save/load plug-ins that wish to preserve an images tattoo state. Using this
|
2003-12-09 01:26:55 +08:00
|
|
|
function at other times will produce unexpected results.
|
|
|
|
HELP
|
2006-03-17 21:38:06 +08:00
|
|
|
|
2006-03-15 05:35:50 +08:00
|
|
|
&andy_pdb_misc('2000');
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'tattoo_state', type => 'tattoo',
|
|
|
|
desc => 'The tattoo state' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
tattoo_state = gimp_image_get_tattoo_state (image);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_set_tattoo_state {
|
|
|
|
$blurb = 'Set the tattoo state associated with the image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2003-12-09 01:26:55 +08:00
|
|
|
This procedure sets the tattoo state of the image. Use only by
|
2017-04-04 19:09:42 +08:00
|
|
|
save/load plug-ins that wish to preserve an images tattoo state. Using
|
2003-12-09 01:26:55 +08:00
|
|
|
this function at other times will produce unexpected results. A full
|
|
|
|
check of uniqueness of states in layers, channels and paths will be
|
|
|
|
performed by this procedure and a execution failure will be returned
|
|
|
|
if this fails. A failure will also be returned if the new tattoo state
|
|
|
|
value is less than the maximum tattoo value from all of the tattoos
|
|
|
|
from the paths, layers and channels. After the image data has been
|
|
|
|
loaded and all the tattoos have been set then this is the last
|
|
|
|
procedure that should be called. If effectively does a status check on
|
|
|
|
the tattoo values that have been set to make sure that all is OK.
|
|
|
|
HELP
|
2006-03-17 21:38:06 +08:00
|
|
|
|
2006-03-15 05:35:50 +08:00
|
|
|
&andy_pdb_misc('2000');
|
2003-12-09 01:26:55 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'tattoo_state', type => 'tattoo',
|
|
|
|
desc => 'The new image tattoo state' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
gimp_image_set_tattoo_state (image, tattoo_state);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_get_layer_by_tattoo {
|
|
|
|
$blurb = 'Find a layer with a given tattoo in an image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the layer with the given tattoo in the specified image.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&jay_pdb_misc('1998');
|
2003-12-09 01:26:55 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'tattoo', type => 'tattoo',
|
|
|
|
desc => 'The tattoo of the layer to find' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'layer', type => 'layer',
|
|
|
|
desc => 'The layer with the specified tattoo' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
layer = gimp_image_get_layer_by_tattoo (image, tattoo);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_get_channel_by_tattoo {
|
|
|
|
$blurb = 'Find a channel with a given tattoo in an image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the channel with the given tattoo in the specified image.
|
1999-04-27 12:33:41 +08:00
|
|
|
HELP
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
&jay_pdb_misc('1998');
|
1999-04-27 12:33:41 +08:00
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'tattoo', type => 'tattoo',
|
|
|
|
desc => 'The tattoo of the channel to find' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'channel', type => 'channel',
|
|
|
|
desc => 'The channel with the specified tattoo' }
|
1999-04-27 12:33:41 +08:00
|
|
|
);
|
|
|
|
|
2006-03-17 21:38:06 +08:00
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
1999-04-27 12:33:41 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
channel = gimp_image_get_channel_by_tattoo (image, tattoo);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
sub image_get_vectors_by_tattoo {
|
|
|
|
$blurb = 'Find a vectors with a given tattoo in an image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2008-09-24 15:47:58 +08:00
|
|
|
This procedure returns the vectors with the given tattoo in the
|
|
|
|
specified image.
|
2006-03-17 21:38:06 +08:00
|
|
|
HELP
|
|
|
|
|
2007-11-06 02:19:02 +08:00
|
|
|
&simon_pdb_misc('2005', '2.6');
|
2006-03-17 21:38:06 +08:00
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'tattoo', type => 'tattoo',
|
|
|
|
desc => 'The tattoo of the vectors to find' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'vectors', type => 'vectors',
|
|
|
|
desc => 'The vectors with the specified tattoo' }
|
2006-03-17 21:38:06 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2006-03-17 21:38:06 +08:00
|
|
|
{
|
2006-03-24 05:17:16 +08:00
|
|
|
vectors = gimp_image_get_vectors_by_tattoo (image, tattoo);
|
2006-03-17 21:38:06 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
1999-04-27 12:33:41 +08:00
|
|
|
}
|
|
|
|
|
2011-09-24 22:35:59 +08:00
|
|
|
sub image_get_layer_by_name {
|
|
|
|
$blurb = 'Find a layer with a given name in an image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the layer with the given name in the specified image.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&mitch_pdb_misc('2011', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'name', type => 'string', non_empty => 1,
|
|
|
|
desc => 'The name of the layer to find' }
|
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
|
|
|
{ name => 'layer', type => 'layer',
|
|
|
|
desc => 'The layer with the specified name' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
|
|
|
layer = gimp_image_get_layer_by_name (image, name);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_get_channel_by_name {
|
|
|
|
$blurb = 'Find a channel with a given name in an image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the channel with the given name in the specified image.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&mitch_pdb_misc('2011', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'name', type => 'string', non_empty => 1,
|
|
|
|
desc => 'The name of the channel to find' }
|
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
|
|
|
{ name => 'channel', type => 'channel',
|
|
|
|
desc => 'The channel with the specified name' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
|
|
|
channel = gimp_image_get_channel_by_name (image, name);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_get_vectors_by_name {
|
|
|
|
$blurb = 'Find a vectors with a given name in an image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure returns the vectors with the given name in the
|
|
|
|
specified image.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&mitch_pdb_misc('2011', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'name', type => 'string', non_empty => 1,
|
|
|
|
desc => 'The name of the vectors to find' }
|
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
|
|
|
{ name => 'vectors', type => 'vectors',
|
|
|
|
desc => 'The vectors with the specified name' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
|
|
|
vectors = gimp_image_get_vectors_by_name (image, name);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2011-03-08 20:19:21 +08:00
|
|
|
sub image_attach_parasite {
|
|
|
|
$blurb = 'Add a parasite to an image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure attaches a parasite to an image. It has no return values.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&jay_pdb_misc('1998', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'parasite', type => 'parasite',
|
|
|
|
desc => 'The parasite to attach to an image' }
|
2011-03-08 20:19:21 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2011-03-08 20:19:21 +08:00
|
|
|
{
|
2014-03-22 07:11:15 +08:00
|
|
|
if (gimp_image_parasite_validate (image, parasite, error))
|
2019-05-30 22:44:23 +08:00
|
|
|
gimp_image_parasite_attach (image, parasite, TRUE);
|
2014-03-22 07:11:15 +08:00
|
|
|
else
|
|
|
|
success = FALSE;
|
2011-03-08 20:19:21 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_detach_parasite {
|
|
|
|
$blurb = 'Removes a parasite from an image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
This procedure detaches a parasite from an image. It has no return values.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&jay_pdb_misc('1998', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'name', type => 'string',
|
|
|
|
desc => 'The name of the parasite to detach from an image.' }
|
2011-03-08 20:19:21 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2011-03-08 20:19:21 +08:00
|
|
|
{
|
2019-05-30 22:44:23 +08:00
|
|
|
gimp_image_parasite_detach (image, name, TRUE);
|
2011-03-08 20:19:21 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_get_parasite {
|
|
|
|
$blurb = 'Look up a parasite in an image';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
|
|
|
Finds and returns the parasite that was previously attached to an image.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&jay_pdb_misc('1998', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'name', type => 'string',
|
|
|
|
desc => 'The name of the parasite to find' }
|
2011-03-08 20:19:21 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'parasite', type => 'parasite',
|
|
|
|
desc => 'The found parasite' }
|
2011-03-08 20:19:21 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2011-03-08 20:19:21 +08:00
|
|
|
{
|
|
|
|
parasite = gimp_parasite_copy (gimp_image_parasite_find (image, name));
|
|
|
|
|
|
|
|
if (! parasite)
|
|
|
|
success = FALSE;
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_get_parasite_list {
|
|
|
|
$blurb = 'List all parasites.';
|
2020-10-29 19:44:18 +08:00
|
|
|
$help = <<'HELP';
|
|
|
|
Returns a list of the names of all currently attached parasites.
|
|
|
|
These names can later be used to get the actual #GimpParasite with
|
|
|
|
gimp_image_get_parasite() when needed.
|
|
|
|
HELP
|
2011-03-08 20:19:21 +08:00
|
|
|
|
|
|
|
&marc_pdb_misc('1999', '2.8');
|
|
|
|
|
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' }
|
2011-03-08 20:19:21 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2020-12-24 04:15:43 +08:00
|
|
|
{ name => 'parasites', type => 'strv',
|
|
|
|
desc => 'The names of currently attached parasites' }
|
2011-03-08 20:19:21 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
2011-03-08 20:19:21 +08:00
|
|
|
{
|
2020-12-24 04:15:43 +08:00
|
|
|
parasites = gimp_image_parasite_list (image);
|
2011-03-08 20:19:21 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
1999-06-24 07:01:14 +08:00
|
|
|
sub image_thumbnail {
|
|
|
|
$blurb = 'Get a thumbnail of an image.';
|
|
|
|
|
|
|
|
$help = <<'HELP';
|
2004-09-10 17:30:06 +08:00
|
|
|
This function gets data from which a thumbnail of an image preview can
|
|
|
|
be created. Maximum x or y dimension is 1024 pixels. The pixels are
|
|
|
|
returned in RGB[A] or GRAY[A] format. The bpp return value gives the
|
|
|
|
number of bits per pixel in the image.
|
1999-06-24 07:01:14 +08:00
|
|
|
HELP
|
|
|
|
|
2006-03-15 05:35:50 +08:00
|
|
|
&andy_pdb_misc('1999');
|
1999-06-24 07:01:14 +08:00
|
|
|
|
2019-08-08 01:09:00 +08:00
|
|
|
$lib_private = 1;
|
|
|
|
|
1999-06-24 07:01:14 +08:00
|
|
|
@inargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'width', type => '1 <= int32 <= 1024',
|
|
|
|
desc => 'The requested thumbnail width' },
|
|
|
|
{ name => 'height', type => '1 <= int32 <= 1024',
|
|
|
|
desc => 'The requested thumbnail height' }
|
1999-06-24 07:01:14 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
@outargs = (
|
2011-08-13 02:18:45 +08:00
|
|
|
{ name => 'actual_width', type => 'int32', void_ret => 1,
|
|
|
|
desc => 'The previews width' },
|
|
|
|
{ name => 'actual_height', type => 'int32',
|
|
|
|
desc => 'The previews height' },
|
|
|
|
{ name => 'bpp', type => 'int32',
|
|
|
|
desc => 'The previews bpp' },
|
2019-08-08 01:09:00 +08:00
|
|
|
{ name => 'thumbnail_data', type => 'int8array',
|
2011-08-13 02:18:45 +08:00
|
|
|
desc => 'The thumbnail data',
|
|
|
|
array => { name => 'thumbnail_data_count',
|
|
|
|
desc => 'The number of bytes in thumbnail data' } }
|
1999-06-24 07:01:14 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
2011-08-13 02:18:45 +08:00
|
|
|
code => <<'CODE'
|
1999-06-24 07:01:14 +08:00
|
|
|
{
|
2012-04-09 02:25:49 +08:00
|
|
|
GimpTempBuf *buf;
|
|
|
|
gint dwidth, dheight;
|
1999-07-29 07:00:08 +08:00
|
|
|
|
2018-02-12 05:23:10 +08:00
|
|
|
gimp_assert (GIMP_VIEWABLE_MAX_PREVIEW_SIZE >= 1024);
|
2003-06-24 15:52:32 +08:00
|
|
|
|
|
|
|
/* Adjust the width/height ratio */
|
2006-03-24 05:17:16 +08:00
|
|
|
dwidth = gimp_image_get_width (image);
|
|
|
|
dheight = gimp_image_get_height (image);
|
2003-06-24 15:52:32 +08:00
|
|
|
|
|
|
|
if (dwidth > dheight)
|
2006-03-15 23:00:01 +08:00
|
|
|
height = MAX (1, (width * dheight) / dwidth);
|
2003-06-24 15:52:32 +08:00
|
|
|
else
|
2006-03-15 23:00:01 +08:00
|
|
|
width = MAX (1, (height * dwidth) / dheight);
|
2003-06-24 15:52:32 +08:00
|
|
|
|
2013-09-14 05:29:06 +08:00
|
|
|
gimp_pickable_flush (GIMP_PICKABLE (image));
|
2007-08-02 22:54:29 +08:00
|
|
|
|
2007-06-12 03:26:31 +08:00
|
|
|
buf = gimp_viewable_get_new_preview (GIMP_VIEWABLE (image), context,
|
|
|
|
width, height);
|
2003-06-24 15:52:32 +08:00
|
|
|
|
|
|
|
if (buf)
|
|
|
|
{
|
2012-04-23 15:40:56 +08:00
|
|
|
actual_width = gimp_temp_buf_get_width (buf);
|
|
|
|
actual_height = gimp_temp_buf_get_height (buf);
|
|
|
|
bpp = babl_format_get_bytes_per_pixel (gimp_temp_buf_get_format (buf));
|
2012-04-09 05:56:52 +08:00
|
|
|
thumbnail_data_count = gimp_temp_buf_get_data_size (buf);
|
2021-08-26 23:18:32 +08:00
|
|
|
thumbnail_data = g_memdup2 (gimp_temp_buf_get_data (buf),
|
|
|
|
thumbnail_data_count);
|
2003-12-08 20:28:29 +08:00
|
|
|
|
2012-04-09 06:16:46 +08:00
|
|
|
gimp_temp_buf_unref (buf);
|
1999-07-29 07:00:08 +08:00
|
|
|
}
|
2004-02-10 23:33:37 +08:00
|
|
|
else
|
2006-03-25 05:57:47 +08:00
|
|
|
success = FALSE;
|
1999-06-24 07:01:14 +08:00
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2020-09-24 08:53:24 +08:00
|
|
|
sub image_policy_rotate {
|
|
|
|
$blurb = 'Execute the "Orientation" metadata policy.';
|
|
|
|
$help = <<'HELP';
|
|
|
|
Process the image according to the rotation policy as set in Preferences.
|
|
|
|
If GIMP is running as a GUI and interactive is TRUE, a dialog may be
|
|
|
|
presented to the user depending on the set policy. Otherwise, if the
|
|
|
|
policy does not mandate the action to perform, the image will be rotated
|
|
|
|
following the Orientation metadata.
|
|
|
|
|
|
|
|
If you wish absolutely to rotate a loaded image following the
|
|
|
|
Orientation metadata, do not use this function and process the metadata
|
|
|
|
yourself. Indeed even with `interactive` to FALSE, user settings may
|
|
|
|
leave the image unrotated.
|
|
|
|
|
|
|
|
Finally it is unnecessary to call this function in a format load
|
|
|
|
procedure because this is called automatically by the core code when
|
|
|
|
loading any image. You should only call this function explicitly when
|
|
|
|
loading an image through a PDB call.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&jehan_pdb_misc('2020', '3.0');
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'interactive', type => 'boolean',
|
|
|
|
desc => 'Querying the user through a dialog is a possibility' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
|
|
|
gimp_image_import_rotation_metadata (image, context, progress, interactive);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub image_policy_color_profile {
|
|
|
|
$blurb = 'Execute the color profile conversion policy.';
|
|
|
|
$help = <<'HELP';
|
2020-09-24 22:27:34 +08:00
|
|
|
Process the image according to the color profile policy as set in
|
|
|
|
Preferences.
|
|
|
|
|
2020-09-24 08:53:24 +08:00
|
|
|
If GIMP is running as a GUI and interactive is TRUE, a dialog may be
|
2020-09-24 22:27:34 +08:00
|
|
|
presented to the user depending on the policy. Otherwise, if the policy
|
|
|
|
does not mandate the conversion to perform, the conversion to the
|
|
|
|
preferred RGB or grayscale profile will happen, defaulting to built-in
|
|
|
|
profiles if no preferred profiles were set in `Preferences`.
|
2020-09-24 08:53:24 +08:00
|
|
|
|
|
|
|
This function should be used only if you want to follow user settings.
|
Fix typos
Found via:
```
codespell -q 3 -S ./ChangeLog*,*.po,./.git,./NEWS* -L als,ang,ba,chello,daa,doubleclick,foto,hist,iff,inport,klass,mut,nd,ower,paeth,params,pard,pevent,sinc,thru,tim,uint
```
2020-11-06 00:43:53 +08:00
|
|
|
If you intend to convert to a specific profile, call preferably
|
2020-09-24 08:53:24 +08:00
|
|
|
gimp_image_convert_color_profile(). And if you wish to leave whatever
|
|
|
|
profile an image has, do not call any of these functions.
|
|
|
|
|
|
|
|
Finally it is unnecessary to call this function in a format load
|
|
|
|
procedure because this is called automatically by the core code when
|
|
|
|
loading any image. You should only call this function explicitly when
|
|
|
|
loading an image through a PDB call.
|
|
|
|
HELP
|
|
|
|
|
|
|
|
&jehan_pdb_misc('2020', '3.0');
|
|
|
|
|
|
|
|
@inargs = (
|
|
|
|
{ name => 'image', type => 'image',
|
|
|
|
desc => 'The image' },
|
|
|
|
{ name => 'interactive', type => 'boolean',
|
|
|
|
desc => 'Querying the user through a dialog is a possibility' }
|
|
|
|
);
|
|
|
|
|
|
|
|
%invoke = (
|
|
|
|
code => <<'CODE'
|
|
|
|
{
|
|
|
|
gimp_image_import_color_profile (image, context, progress, interactive);
|
|
|
|
}
|
|
|
|
CODE
|
|
|
|
);
|
|
|
|
}
|
2000-02-16 07:49:03 +08:00
|
|
|
|
2006-06-14 16:32:08 +08:00
|
|
|
@headers = qw("libgimpmath/gimpmath.h"
|
|
|
|
"libgimpbase/gimpbase.h"
|
2018-07-07 01:43:26 +08:00
|
|
|
"gegl/gimp-babl.h"
|
2006-06-14 16:32:08 +08:00
|
|
|
"core/gimp.h"
|
2008-11-03 05:34:14 +08:00
|
|
|
"core/gimpcontainer.h"
|
2020-09-24 08:53:24 +08:00
|
|
|
"core/gimpimage-color-profile.h"
|
2013-10-20 00:38:01 +08:00
|
|
|
"core/gimpimage-metadata.h"
|
2020-09-24 08:53:24 +08:00
|
|
|
"core/gimpimage-rotate.h"
|
2008-09-24 16:28:16 +08:00
|
|
|
"core/gimpprogress.h"
|
2012-04-09 06:59:20 +08:00
|
|
|
"core/gimptempbuf.h"
|
2015-07-14 04:43:22 +08:00
|
|
|
"file/file-utils.h"
|
2012-04-26 02:39:23 +08:00
|
|
|
"plug-in/gimpplugin.h"
|
2018-05-08 02:09:07 +08:00
|
|
|
"plug-in/gimpplugin-cleanup.h"
|
2012-04-26 02:39:23 +08:00
|
|
|
"plug-in/gimppluginmanager.h"
|
2010-09-17 02:33:56 +08:00
|
|
|
"gimppdbcontext.h"
|
2007-12-06 02:28:49 +08:00
|
|
|
"gimppdberror.h"
|
2008-04-04 15:11:13 +08:00
|
|
|
"gimppdb-utils.h"
|
2006-06-14 16:32:08 +08:00
|
|
|
"gimp-intl.h");
|
2006-03-24 05:17:16 +08:00
|
|
|
|
2019-08-29 17:25:35 +08:00
|
|
|
@procs = qw(image_id_is_valid
|
2019-09-05 18:57:43 +08:00
|
|
|
get_images
|
2012-04-26 02:39:23 +08:00
|
|
|
image_new image_new_with_precision
|
|
|
|
image_duplicate image_delete
|
2021-04-06 06:47:07 +08:00
|
|
|
image_get_base_type
|
2012-04-26 02:51:29 +08:00
|
|
|
image_get_precision
|
2017-08-22 02:04:25 +08:00
|
|
|
image_get_default_new_layer_mode
|
2021-04-06 06:47:07 +08:00
|
|
|
image_get_width image_get_height
|
2008-02-08 01:08:54 +08:00
|
|
|
image_get_layers
|
|
|
|
image_get_channels
|
2006-03-17 21:38:06 +08:00
|
|
|
image_get_vectors
|
|
|
|
image_get_active_drawable
|
|
|
|
image_unset_active_channel
|
2008-02-08 01:08:54 +08:00
|
|
|
image_get_floating_sel
|
|
|
|
image_floating_sel_attached_to
|
|
|
|
image_pick_color
|
|
|
|
image_pick_correlate_layer
|
2018-04-29 02:15:15 +08:00
|
|
|
image_insert_layer image_remove_layer
|
2018-05-07 14:21:49 +08:00
|
|
|
image_freeze_layers image_thaw_layers
|
2018-04-29 02:15:15 +08:00
|
|
|
image_insert_channel image_remove_channel
|
2018-05-07 14:21:49 +08:00
|
|
|
image_freeze_channels image_thaw_channels
|
2018-04-29 02:15:15 +08:00
|
|
|
image_insert_vectors image_remove_vectors
|
2018-05-07 14:21:49 +08:00
|
|
|
image_freeze_vectors image_thaw_vectors
|
2010-08-27 22:11:06 +08:00
|
|
|
image_get_item_position
|
|
|
|
image_raise_item image_lower_item
|
|
|
|
image_raise_item_to_top image_lower_item_to_bottom
|
2010-08-31 02:36:11 +08:00
|
|
|
image_reorder_item
|
2006-03-17 21:38:06 +08:00
|
|
|
image_flatten image_merge_visible_layers image_merge_down
|
2019-09-07 15:20:03 +08:00
|
|
|
image_merge_layer_group
|
2006-03-17 21:38:06 +08:00
|
|
|
image_get_colormap image_set_colormap
|
2013-10-20 00:38:01 +08:00
|
|
|
image_get_metadata image_set_metadata
|
2006-03-17 21:38:06 +08:00
|
|
|
image_clean_all image_is_dirty
|
|
|
|
image_thumbnail
|
2011-08-13 02:18:45 +08:00
|
|
|
image_get_active_layer image_set_active_layer
|
|
|
|
image_get_active_channel image_set_active_channel
|
|
|
|
image_get_active_vectors image_set_active_vectors
|
2021-02-22 06:17:30 +08:00
|
|
|
image_get_selected_layers image_set_selected_layers
|
2011-08-13 02:18:45 +08:00
|
|
|
image_get_selection
|
|
|
|
image_get_component_active image_set_component_active
|
|
|
|
image_get_component_visible image_set_component_visible
|
2019-09-12 03:48:34 +08:00
|
|
|
image_get_file
|
|
|
|
image_set_file
|
|
|
|
image_get_xcf_file
|
|
|
|
image_get_imported_file
|
|
|
|
image_get_exported_file
|
2009-03-05 03:35:18 +08:00
|
|
|
image_get_name
|
2011-08-13 02:18:45 +08:00
|
|
|
image_get_resolution image_set_resolution
|
|
|
|
image_get_unit image_set_unit
|
|
|
|
image_get_tattoo_state image_set_tattoo_state
|
2006-03-17 21:38:06 +08:00
|
|
|
image_get_layer_by_tattoo
|
|
|
|
image_get_channel_by_tattoo
|
2011-03-08 20:19:21 +08:00
|
|
|
image_get_vectors_by_tattoo
|
2011-09-24 22:35:59 +08:00
|
|
|
image_get_layer_by_name
|
|
|
|
image_get_channel_by_name
|
|
|
|
image_get_vectors_by_name
|
2011-03-08 20:19:21 +08:00
|
|
|
image_attach_parasite image_detach_parasite
|
|
|
|
image_get_parasite
|
2020-09-24 08:53:24 +08:00
|
|
|
image_get_parasite_list
|
|
|
|
image_policy_rotate
|
|
|
|
image_policy_color_profile);
|
2006-03-24 05:17:16 +08:00
|
|
|
|
2018-04-29 02:15:15 +08:00
|
|
|
%exports = (app => [@procs], lib => [@procs]);
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
$desc = 'Image';
|
2010-07-07 17:43:10 +08:00
|
|
|
$doc_title = 'gimpimage';
|
|
|
|
$doc_short_desc = 'Operations on complete images.';
|
|
|
|
$doc_long_desc = 'Operations on complete images: creation, resizing/rescaling, and operations involving multiple layers.';
|
1999-04-27 12:33:41 +08:00
|
|
|
|
|
|
|
1;
|