/* LIBPIKA - The PIKA Library * Copyright (C) 1995-2003 Peter Mattis and Spencer Kimball * * pikaimage_pdb.c * * This library is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see * . */ /* NOTE: This file is auto-generated by pdbgen.pl */ #include "config.h" #include "stamp-pdbgen.h" #include "pika.h" /** * SECTION: pikaimage * @title: pikaimage * @short_description: Operations on complete images. * * Operations on complete images: creation, resizing/rescaling, and * operations involving multiple layers. **/ /** * pika_image_id_is_valid: * @image_id: The image ID to check. * * Returns TRUE if the image ID is valid. * * This procedure checks if the given image ID is valid and refers to * an existing image. * * Returns: Whether the image ID is valid. * * Since: 3.0 **/ gboolean pika_image_id_is_valid (gint image_id) { PikaValueArray *args; PikaValueArray *return_vals; gboolean valid = FALSE; args = pika_value_array_new_from_types (NULL, G_TYPE_INT, image_id, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-id-is-valid", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) valid = PIKA_VALUES_GET_BOOLEAN (return_vals, 1); pika_value_array_unref (return_vals); return valid; } /** * pika_get_images: (skip) * @num_images: (out): The number of images currently open. * * Returns the list of images currently open. * * This procedure returns the list of images currently open in PIKA. * * Returns: (array length=num_images) (element-type PikaImage) (transfer container): * The list of images currently open. * The returned value must be freed with g_free(). **/ PikaImage ** pika_get_images (gint *num_images) { PikaValueArray *args; PikaValueArray *return_vals; PikaImage **images = NULL; args = pika_value_array_new_from_types (NULL, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-get-images", args); pika_value_array_unref (args); *num_images = 0; if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) { *num_images = PIKA_VALUES_GET_INT (return_vals, 1); { PikaObjectArray *a = g_value_get_boxed (pika_value_array_index (return_vals, 2)); if (a) images = g_memdup2 (a->data, a->length * sizeof (gpointer)); }; } pika_value_array_unref (return_vals); return images; } /** * pika_image_new: * @width: The width of the image. * @height: The height of the image. * @type: The type of image. * * Creates a new image with the specified width, height, and type. * * Creates a new image, undisplayed, with the specified extents and * type. A layer should be created and added before this image is * displayed, or subsequent calls to pika_display_new() with this image * as an argument will fail. Layers can be created using the * pika_layer_new() commands. They can be added to an image using the * pika_image_insert_layer() command. * * If your image's type if INDEXED, a colormap must also be added with * pika_image_set_colormap(). An indexed image without a colormap will * output unexpected colors. * * Returns: (transfer none): The newly created image. **/ PikaImage * pika_image_new (gint width, gint height, PikaImageBaseType type) { PikaValueArray *args; PikaValueArray *return_vals; PikaImage *image = NULL; args = pika_value_array_new_from_types (NULL, G_TYPE_INT, width, G_TYPE_INT, height, PIKA_TYPE_IMAGE_BASE_TYPE, type, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-new", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) image = PIKA_VALUES_GET_IMAGE (return_vals, 1); pika_value_array_unref (return_vals); return image; } /** * pika_image_new_with_precision: * @width: The width of the image. * @height: The height of the image. * @type: The type of image. * @precision: The precision. * * Creates a new image with the specified width, height, type and * precision. * * Creates a new image, undisplayed with the specified extents, type * and precision. Indexed images can only be created at * PIKA_PRECISION_U8_NON_LINEAR precision. See pika_image_new() for * further details. * * Returns: (transfer none): The newly created image. * * Since: 2.10 **/ PikaImage * pika_image_new_with_precision (gint width, gint height, PikaImageBaseType type, PikaPrecision precision) { PikaValueArray *args; PikaValueArray *return_vals; PikaImage *image = NULL; args = pika_value_array_new_from_types (NULL, G_TYPE_INT, width, G_TYPE_INT, height, PIKA_TYPE_IMAGE_BASE_TYPE, type, PIKA_TYPE_PRECISION, precision, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-new-with-precision", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) image = PIKA_VALUES_GET_IMAGE (return_vals, 1); pika_value_array_unref (return_vals); return image; } /** * pika_image_duplicate: * @image: The image. * * Duplicate the specified image * * This procedure duplicates the specified image, copying all layers, * channels, and image information. * * Returns: (transfer none): The new, duplicated image. **/ PikaImage * pika_image_duplicate (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; PikaImage *new_image = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-duplicate", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) new_image = PIKA_VALUES_GET_IMAGE (return_vals, 1); pika_value_array_unref (return_vals); return new_image; } /** * pika_image_delete: * @image: The image. * * Delete the specified image. * * 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. * * Returns: TRUE on success. **/ gboolean pika_image_delete (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-delete", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_base_type: * @image: The image. * * Get the base type of the image. * * This procedure returns the image's base type. Layers in the image * must be of this subtype, but can have an optional alpha channel. * * Returns: The image's base type. **/ PikaImageBaseType pika_image_get_base_type (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; PikaImageBaseType base_type = 0; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-base-type", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) base_type = PIKA_VALUES_GET_ENUM (return_vals, 1); pika_value_array_unref (return_vals); return base_type; } /** * pika_image_get_precision: * @image: The image. * * Get the precision of the image. * * This procedure returns the image's precision. * * Returns: The image's precision. * * Since: 2.10 **/ PikaPrecision pika_image_get_precision (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; PikaPrecision precision = 0; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-precision", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) precision = PIKA_VALUES_GET_ENUM (return_vals, 1); pika_value_array_unref (return_vals); return precision; } /** * pika_image_get_default_new_layer_mode: * @image: The image. * * Get the default mode for newly created layers of this image. * * Returns the default mode for newly created layers of this image. * * Returns: The layer mode. * * Since: 2.10 **/ PikaLayerMode pika_image_get_default_new_layer_mode (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; PikaLayerMode mode = 0; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-default-new-layer-mode", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) mode = PIKA_VALUES_GET_ENUM (return_vals, 1); pika_value_array_unref (return_vals); return mode; } /** * pika_image_get_width: * @image: The image. * * Return the width of the image * * This procedure returns the image's width. This value is independent * of any of the layers in this image. This is the \"canvas\" width. * * Returns: The image's width. **/ gint pika_image_get_width (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gint width = 0; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-width", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) width = PIKA_VALUES_GET_INT (return_vals, 1); pika_value_array_unref (return_vals); return width; } /** * pika_image_get_height: * @image: The image. * * Return the height of the image * * This procedure returns the image's height. This value is independent * of any of the layers in this image. This is the \"canvas\" height. * * Returns: The image's height. **/ gint pika_image_get_height (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gint height = 0; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-height", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) height = PIKA_VALUES_GET_INT (return_vals, 1); pika_value_array_unref (return_vals); return height; } /** * pika_image_get_layers: (skip) * @image: The image. * @num_layers: (out): The number of root layers contained in the image. * * Returns the list of root layers contained in the specified image. * * This procedure returns the list of root layers contained in the * specified image. The order of layers is from topmost to bottommost. * 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 pika_item_is_group() and to obtain its children * with pika_item_get_children() (possibly recursively checking if * these have children too). * * Returns: (array length=num_layers) (element-type PikaLayer) (transfer container): * The list of layers contained in the image. * The returned value must be freed with g_free(). **/ PikaLayer ** pika_image_get_layers (PikaImage *image, gint *num_layers) { PikaValueArray *args; PikaValueArray *return_vals; PikaLayer **layers = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-layers", args); pika_value_array_unref (args); *num_layers = 0; if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) { *num_layers = PIKA_VALUES_GET_INT (return_vals, 1); { PikaObjectArray *a = g_value_get_boxed (pika_value_array_index (return_vals, 2)); if (a) layers = g_memdup2 (a->data, a->length * sizeof (gpointer)); }; } pika_value_array_unref (return_vals); return layers; } /** * pika_image_get_channels: (skip) * @image: The image. * @num_channels: (out): The number of channels contained in the image. * * Returns the list of channels contained in the specified image. * * This procedure returns the list of channels contained in the * specified image. This does not include the selection mask, or layer * masks. The order is from topmost to bottommost. Note that * \"channels\" are custom channels and do not include the image's * color components. * * Returns: (array length=num_channels) (element-type PikaChannel) (transfer container): * The list of channels contained in the image. * The returned value must be freed with g_free(). **/ PikaChannel ** pika_image_get_channels (PikaImage *image, gint *num_channels) { PikaValueArray *args; PikaValueArray *return_vals; PikaChannel **channels = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-channels", args); pika_value_array_unref (args); *num_channels = 0; if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) { *num_channels = PIKA_VALUES_GET_INT (return_vals, 1); { PikaObjectArray *a = g_value_get_boxed (pika_value_array_index (return_vals, 2)); if (a) channels = g_memdup2 (a->data, a->length * sizeof (gpointer)); }; } pika_value_array_unref (return_vals); return channels; } /** * pika_image_get_vectors: (skip) * @image: The image. * @num_vectors: (out): The number of vectors contained in the image. * * Returns the list of vectors contained in the specified image. * * This procedure returns the list of vectors contained in the * specified image. * * Returns: (array length=num_vectors) (element-type PikaVectors) (transfer container): * The list of vectors contained in the image. * The returned value must be freed with g_free(). * * Since: 2.4 **/ PikaVectors ** pika_image_get_vectors (PikaImage *image, gint *num_vectors) { PikaValueArray *args; PikaValueArray *return_vals; PikaVectors **vectors = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-vectors", args); pika_value_array_unref (args); *num_vectors = 0; if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) { *num_vectors = PIKA_VALUES_GET_INT (return_vals, 1); { PikaObjectArray *a = g_value_get_boxed (pika_value_array_index (return_vals, 2)); if (a) vectors = g_memdup2 (a->data, a->length * sizeof (gpointer)); }; } pika_value_array_unref (return_vals); return vectors; } /** * pika_image_unset_active_channel: * @image: The image. * * Unsets the active channel in the specified image. * * 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. * * Returns: TRUE on success. **/ gboolean pika_image_unset_active_channel (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-unset-active-channel", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_floating_sel: * @image: The image. * * Return the floating selection of the image. * * This procedure returns the image's floating selection, if it exists. * If it doesn't exist, -1 is returned as the layer ID. * * Returns: (transfer none): The image's floating selection. **/ PikaLayer * pika_image_get_floating_sel (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; PikaLayer *floating_sel = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-floating-sel", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) floating_sel = PIKA_VALUES_GET_LAYER (return_vals, 1); pika_value_array_unref (return_vals); return floating_sel; } /** * pika_image_floating_sel_attached_to: * @image: The image. * * Return the drawable the floating selection is attached to. * * 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. * * Returns: (transfer none): * The drawable the floating selection is attached to. **/ PikaDrawable * pika_image_floating_sel_attached_to (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; PikaDrawable *drawable = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-floating-sel-attached-to", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) drawable = PIKA_VALUES_GET_DRAWABLE (return_vals, 1); pika_value_array_unref (return_vals); return drawable; } /** * pika_image_pick_color: * @image: The image. * @num_drawables: The number of drawables. * @drawables: (array length=num_drawables) (element-type PikaItem): The drawables to pick from. * @x: x coordinate of upper-left corner of rectangle. * @y: y coordinate of upper-left corner of rectangle. * @sample_merged: Use the composite image, not the drawables. * @sample_average: Average the color of all the pixels in a specified radius. * @average_radius: The radius of pixels to average. * @color: (out caller-allocates): The return color. * * Determine the color at the given coordinates * * 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 * 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. * * Returns: TRUE on success. **/ gboolean pika_image_pick_color (PikaImage *image, gint num_drawables, const PikaItem **drawables, gdouble x, gdouble y, gboolean sample_merged, gboolean sample_average, gdouble average_radius, PikaRGB *color) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_INT, num_drawables, PIKA_TYPE_OBJECT_ARRAY, NULL, G_TYPE_DOUBLE, x, G_TYPE_DOUBLE, y, G_TYPE_BOOLEAN, sample_merged, G_TYPE_BOOLEAN, sample_average, G_TYPE_DOUBLE, average_radius, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 2), PIKA_TYPE_ITEM, (GObject **) drawables, num_drawables); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-pick-color", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; if (success) PIKA_VALUES_GET_RGB (return_vals, 1, &*color); pika_value_array_unref (return_vals); return success; } /** * pika_image_pick_correlate_layer: * @image: The image. * @x: The x coordinate for the pick. * @y: The y coordinate for the pick. * * Find the layer visible at the specified coordinates. * * 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. * * Returns: (transfer none): The layer found at the specified coordinates. **/ PikaLayer * pika_image_pick_correlate_layer (PikaImage *image, gint x, gint y) { PikaValueArray *args; PikaValueArray *return_vals; PikaLayer *layer = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_INT, x, G_TYPE_INT, y, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-pick-correlate-layer", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) layer = PIKA_VALUES_GET_LAYER (return_vals, 1); pika_value_array_unref (return_vals); return layer; } /** * pika_image_insert_layer: * @image: The image. * @layer: The layer. * @parent: (nullable): The parent layer. * @position: The layer position. * * Add the specified layer to the image. * * This procedure adds the specified layer to the image at the given * position. If the specified parent is a valid layer group (See * pika_item_is_group() and pika_layer_group_new()) then the layer is * 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. * * Returns: TRUE on success. **/ gboolean pika_image_insert_layer (PikaImage *image, PikaLayer *layer, PikaLayer *parent, gint position) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_LAYER, layer, PIKA_TYPE_LAYER, parent, G_TYPE_INT, position, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-insert-layer", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_remove_layer: * @image: The image. * @layer: The layer. * * Remove the specified layer from the image. * * 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. * * Returns: TRUE on success. **/ gboolean pika_image_remove_layer (PikaImage *image, PikaLayer *layer) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_LAYER, layer, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-remove-layer", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_freeze_layers: * @image: The image. * * Freeze the image's layer list. * * This procedure freezes the layer list of the image, suppressing any * 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 pika_image_freeze_layers() should be matched by a * corresponding call to pika_image_thaw_layers(), undoing its effects. * * Returns: TRUE on success. * * Since: 2.10.2 **/ gboolean pika_image_freeze_layers (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-freeze-layers", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_thaw_layers: * @image: The image. * * Thaw the image's layer list. * * This procedure thaws the layer list of the image, re-enabling * updates to the Layers dialog. * * This procedure should match a corresponding call to * pika_image_freeze_layers(). * * Returns: TRUE on success. * * Since: 2.10.2 **/ gboolean pika_image_thaw_layers (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-thaw-layers", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_insert_channel: * @image: The image. * @channel: The channel. * @parent: (nullable): The parent channel. * @position: The channel position. * * Add the specified channel to the image. * * This procedure adds the specified channel to the image at the given * position. Since channel groups are not currently supported, the * parent argument must always be 0. The position argument specifies * the 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. * * Returns: TRUE on success. **/ gboolean pika_image_insert_channel (PikaImage *image, PikaChannel *channel, PikaChannel *parent, gint position) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_CHANNEL, channel, PIKA_TYPE_CHANNEL, parent, G_TYPE_INT, position, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-insert-channel", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_remove_channel: * @image: The image. * @channel: The channel. * * Remove the specified channel from the image. * * This procedure removes the specified channel from the image. If the * channel doesn't exist, an error is returned. * * Returns: TRUE on success. **/ gboolean pika_image_remove_channel (PikaImage *image, PikaChannel *channel) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_CHANNEL, channel, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-remove-channel", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_freeze_channels: * @image: The image. * * Freeze the image's channel list. * * This procedure freezes the channel list of the image, suppressing * any 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 pika_image_freeze_channels() should be matched by a * corresponding call to pika_image_thaw_channels(), undoing its * effects. * * Returns: TRUE on success. * * Since: 2.10.2 **/ gboolean pika_image_freeze_channels (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-freeze-channels", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_thaw_channels: * @image: The image. * * Thaw the image's channel list. * * This procedure thaws the channel list of the image, re-enabling * updates to the Channels dialog. * * This procedure should match a corresponding call to * pika_image_freeze_channels(). * * Returns: TRUE on success. * * Since: 2.10.2 **/ gboolean pika_image_thaw_channels (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-thaw-channels", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_insert_vectors: * @image: The image. * @vectors: The vectors. * @parent: (nullable): The parent vectors. * @position: The vectors position. * * Add the specified vectors to the image. * * This procedure adds the specified vectors to the image at the given * position. Since vectors groups are not currently supported, the * parent argument must always be 0. The position argument specifies * the 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. * * Returns: TRUE on success. **/ gboolean pika_image_insert_vectors (PikaImage *image, PikaVectors *vectors, PikaVectors *parent, gint position) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_VECTORS, vectors, PIKA_TYPE_VECTORS, parent, G_TYPE_INT, position, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-insert-vectors", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_remove_vectors: * @image: The image. * @vectors: The vectors object. * * Remove the specified path from the image. * * This procedure removes the specified path from the image. If the * path doesn't exist, an error is returned. * * Returns: TRUE on success. * * Since: 2.4 **/ gboolean pika_image_remove_vectors (PikaImage *image, PikaVectors *vectors) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_VECTORS, vectors, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-remove-vectors", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_freeze_vectors: * @image: The image. * * Freeze the image's vectors list. * * This procedure freezes the vectors list of the image, suppressing * any 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 pika_image_freeze_vectors() should be matched by a * corresponding call to pika_image_thaw_vectors(), undoing its * effects. * * Returns: TRUE on success. * * Since: 2.10.2 **/ gboolean pika_image_freeze_vectors (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-freeze-vectors", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_thaw_vectors: * @image: The image. * * Thaw the image's vectors list. * * This procedure thaws the vectors list of the image, re-enabling * updates to the Paths dialog. * * This procedure should match a corresponding call to * pika_image_freeze_vectors(). * * Returns: TRUE on success. * * Since: 2.10.2 **/ gboolean pika_image_thaw_vectors (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-thaw-vectors", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_item_position: * @image: The image. * @item: The item. * * Returns the position of the item in its level of its item tree. * * 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. * * Returns: The position of the item in its level in the item tree. * * Since: 2.8 **/ gint pika_image_get_item_position (PikaImage *image, PikaItem *item) { PikaValueArray *args; PikaValueArray *return_vals; gint position = 0; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_ITEM, item, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-item-position", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) position = PIKA_VALUES_GET_INT (return_vals, 1); pika_value_array_unref (return_vals); return position; } /** * pika_image_raise_item: * @image: The image. * @item: The item to raise. * * Raise the specified item in its level in its item tree * * This procedure raises the specified item one step in the item tree. * The procedure call will fail if there is no item above it. * * Returns: TRUE on success. * * Since: 2.8 **/ gboolean pika_image_raise_item (PikaImage *image, PikaItem *item) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_ITEM, item, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-raise-item", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_lower_item: * @image: The image. * @item: The item to lower. * * Lower the specified item in its level in its item tree * * This procedure lowers the specified item one step in the item tree. * The procedure call will fail if there is no item below it. * * Returns: TRUE on success. * * Since: 2.8 **/ gboolean pika_image_lower_item (PikaImage *image, PikaItem *item) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_ITEM, item, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-lower-item", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_raise_item_to_top: * @image: The image. * @item: The item to raise to top. * * Raise the specified item to the top of its level in its item tree * * 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. * * Returns: TRUE on success. * * Since: 2.8 **/ gboolean pika_image_raise_item_to_top (PikaImage *image, PikaItem *item) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_ITEM, item, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-raise-item-to-top", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_lower_item_to_bottom: * @image: The image. * @item: The item to lower to bottom. * * Lower the specified item to the bottom of its level in its item tree * * 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. * * Returns: TRUE on success. * * Since: 2.8 **/ gboolean pika_image_lower_item_to_bottom (PikaImage *image, PikaItem *item) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_ITEM, item, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-lower-item-to-bottom", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_reorder_item: * @image: The image. * @item: The item to reorder. * @parent: (nullable): The new parent item. * @position: The new position of the item. * * Reorder the specified item within its item tree * * This procedure reorders the specified item within its item tree. * * Returns: TRUE on success. * * Since: 2.8 **/ gboolean pika_image_reorder_item (PikaImage *image, PikaItem *item, PikaItem *parent, gint position) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_ITEM, item, PIKA_TYPE_ITEM, parent, G_TYPE_INT, position, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-reorder-item", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_flatten: * @image: The image. * * Flatten all visible layers into a single layer. Discard all * invisible layers. * * 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. * * Returns: (transfer none): The resulting layer. **/ PikaLayer * pika_image_flatten (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; PikaLayer *layer = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-flatten", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) layer = PIKA_VALUES_GET_LAYER (return_vals, 1); pika_value_array_unref (return_vals); return layer; } /** * pika_image_merge_visible_layers: * @image: The image. * @merge_type: The type of merge. * * Merge the visible image layers into one. * * 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. * * Returns: (transfer none): The resulting layer. **/ PikaLayer * pika_image_merge_visible_layers (PikaImage *image, PikaMergeType merge_type) { PikaValueArray *args; PikaValueArray *return_vals; PikaLayer *layer = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_MERGE_TYPE, merge_type, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-merge-visible-layers", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) layer = PIKA_VALUES_GET_LAYER (return_vals, 1); pika_value_array_unref (return_vals); return layer; } /** * pika_image_merge_down: * @image: The image. * @merge_layer: The layer to merge down from. * @merge_type: The type of merge. * * Merge the layer passed and the first visible layer below. * * 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. * * Returns: (transfer none): The resulting layer. **/ PikaLayer * pika_image_merge_down (PikaImage *image, PikaLayer *merge_layer, PikaMergeType merge_type) { PikaValueArray *args; PikaValueArray *return_vals; PikaLayer *layer = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_LAYER, merge_layer, PIKA_TYPE_MERGE_TYPE, merge_type, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-merge-down", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) layer = PIKA_VALUES_GET_LAYER (return_vals, 1); pika_value_array_unref (return_vals); return layer; } /** * pika_image_merge_layer_group: * @image: The image. * @layer_group: The layer group to merge. * * Merge the passed layer group's layers into one normal layer. * * This procedure combines the layers of the passed layer group into a * single normal layer, replacing the group. * * Returns: (transfer none): The resulting layer. * * Since: 2.10.14 **/ PikaLayer * pika_image_merge_layer_group (PikaImage *image, PikaLayer *layer_group) { PikaValueArray *args; PikaValueArray *return_vals; PikaLayer *layer = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_LAYER, layer_group, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-merge-layer-group", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) layer = PIKA_VALUES_GET_LAYER (return_vals, 1); pika_value_array_unref (return_vals); return layer; } /** * _pika_image_get_colormap: * @image: The image. * * Returns the image's colormap * * 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 the transmitted colormap will be 'num-bytes' / * 3. If the image is not in Indexed color mode, no colormap is * returned. * * Returns: (transfer full): The image's colormap. **/ GBytes * _pika_image_get_colormap (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; GBytes *colormap = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-colormap", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) colormap = PIKA_VALUES_DUP_BYTES (return_vals, 1); pika_value_array_unref (return_vals); return colormap; } /** * _pika_image_set_colormap: * @image: The image. * @colormap: The new colormap values. * * Sets the entries in the image's colormap. * * This procedure sets the entries in the specified image's colormap. * The number 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. * * Returns: TRUE on success. **/ gboolean _pika_image_set_colormap (PikaImage *image, GBytes *colormap) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_BYTES, colormap, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-set-colormap", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_palette: * @image: The image. * * Returns the image's colormap * * This procedure returns the image's colormap as a PikaPalette. If the * image is not in Indexed color mode, %NULL is returned. * * Returns: (transfer none): The image's colormap. * * Since: 3.0 **/ PikaPalette * pika_image_get_palette (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; PikaPalette *colormap = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-palette", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) colormap = PIKA_VALUES_GET_PALETTE (return_vals, 1); pika_value_array_unref (return_vals); return colormap; } /** * _pika_image_get_metadata: * @image: The image. * * Returns the image's metadata. * * Returns exif/iptc/xmp metadata from the image. * * Returns: (transfer full): The exif/ptc/xmp metadata as a string. * The returned value must be freed with g_free(). **/ gchar * _pika_image_get_metadata (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gchar *metadata_string = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-metadata", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) metadata_string = PIKA_VALUES_DUP_STRING (return_vals, 1); pika_value_array_unref (return_vals); return metadata_string; } /** * _pika_image_set_metadata: * @image: The image. * @metadata_string: The exif/ptc/xmp metadata as a string. * * Set the image's metadata. * * Sets exif/iptc/xmp metadata on the image. * * Returns: TRUE on success. **/ gboolean _pika_image_set_metadata (PikaImage *image, const gchar *metadata_string) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_STRING, metadata_string, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-set-metadata", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_clean_all: * @image: The image. * * Set the image dirty count to 0. * * 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. * * Returns: TRUE on success. **/ gboolean pika_image_clean_all (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-clean-all", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_is_dirty: * @image: The image. * * Checks if the image has unsaved changes. * * 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 * set the dirty count to 0, you need to call pika_image_clean_all() * after calling a save procedure to make the image clean. * * Returns: TRUE if the image has unsaved changes. **/ gboolean pika_image_is_dirty (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gboolean dirty = FALSE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-is-dirty", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) dirty = PIKA_VALUES_GET_BOOLEAN (return_vals, 1); pika_value_array_unref (return_vals); return dirty; } /** * _pika_image_thumbnail: * @image: The image. * @width: The requested thumbnail width. * @height: The requested thumbnail height. * @actual_width: (out): The previews width. * @actual_height: (out): The previews height. * @bpp: (out): The previews bpp. * @thumbnail_data: (out) (transfer full): The thumbnail data. * * Get a thumbnail of an image. * * 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. * * Returns: TRUE on success. **/ gboolean _pika_image_thumbnail (PikaImage *image, gint width, gint height, gint *actual_width, gint *actual_height, gint *bpp, GBytes **thumbnail_data) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_INT, width, G_TYPE_INT, height, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-thumbnail", args); pika_value_array_unref (args); *actual_width = 0; *actual_height = 0; *bpp = 0; *thumbnail_data = NULL; success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; if (success) { *actual_width = PIKA_VALUES_GET_INT (return_vals, 1); *actual_height = PIKA_VALUES_GET_INT (return_vals, 2); *bpp = PIKA_VALUES_GET_INT (return_vals, 3); *thumbnail_data = PIKA_VALUES_DUP_BYTES (return_vals, 4); } pika_value_array_unref (return_vals); return success; } /** * pika_image_get_selected_layers: (skip) * @image: The image. * @num_layers: (out): The number of selected layers in the image. * * Returns the specified image's selected layers. * * This procedure returns the list of selected layers in the specified * image. * * Returns: (array length=num_layers) (element-type PikaLayer) (transfer container): * The list of selected layers in the image. * The returned value must be freed with g_free(). * * Since: 3.0.0 **/ PikaLayer ** pika_image_get_selected_layers (PikaImage *image, gint *num_layers) { PikaValueArray *args; PikaValueArray *return_vals; PikaLayer **layers = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-selected-layers", args); pika_value_array_unref (args); *num_layers = 0; if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) { *num_layers = PIKA_VALUES_GET_INT (return_vals, 1); { PikaObjectArray *a = g_value_get_boxed (pika_value_array_index (return_vals, 2)); if (a) layers = g_memdup2 (a->data, a->length * sizeof (gpointer)); }; } pika_value_array_unref (return_vals); return layers; } /** * pika_image_set_selected_layers: * @image: The image. * @num_layers: The number of layers to select. * @layers: (array length=num_layers) (element-type PikaLayer): The list of layers to select. * * Sets the specified image's selected layers. * * 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. * * Returns: TRUE on success. * * Since: 3.0.0 **/ gboolean pika_image_set_selected_layers (PikaImage *image, gint num_layers, const PikaLayer **layers) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_INT, num_layers, PIKA_TYPE_OBJECT_ARRAY, NULL, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 2), PIKA_TYPE_LAYER, (GObject **) layers, num_layers); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-set-selected-layers", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_selected_channels: (skip) * @image: The image. * @num_channels: (out): The number of selected channels in the image. * * Returns the specified image's selected channels. * * This procedure returns the list of selected channels in the * specified image. * * Returns: (array length=num_channels) (element-type PikaChannel) (transfer container): * The list of selected channels in the image. * The returned value must be freed with g_free(). * * Since: 3.0.0 **/ PikaChannel ** pika_image_get_selected_channels (PikaImage *image, gint *num_channels) { PikaValueArray *args; PikaValueArray *return_vals; PikaChannel **channels = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-selected-channels", args); pika_value_array_unref (args); *num_channels = 0; if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) { *num_channels = PIKA_VALUES_GET_INT (return_vals, 1); { PikaObjectArray *a = g_value_get_boxed (pika_value_array_index (return_vals, 2)); if (a) channels = g_memdup2 (a->data, a->length * sizeof (gpointer)); }; } pika_value_array_unref (return_vals); return channels; } /** * pika_image_set_selected_channels: * @image: The image. * @num_channels: The number of channels to select. * @channels: (array length=num_channels) (element-type PikaChannel): The list of channels to select. * * Sets the specified image's selected channels. * * The channels are set as the selected channels 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. * * Returns: TRUE on success. * * Since: 3.0.0 **/ gboolean pika_image_set_selected_channels (PikaImage *image, gint num_channels, const PikaChannel **channels) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_INT, num_channels, PIKA_TYPE_OBJECT_ARRAY, NULL, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 2), PIKA_TYPE_CHANNEL, (GObject **) channels, num_channels); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-set-selected-channels", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_selected_vectors: (skip) * @image: The image. * @num_vectors: (out): The number of selected vectors in the image. * * Returns the specified image's selected vectors. * * This procedure returns the list of selected vectors in the specified * image. * * Returns: (array length=num_vectors) (element-type PikaVectors) (transfer container): * The list of selected vectors in the image. * The returned value must be freed with g_free(). * * Since: 3.0.0 **/ PikaVectors ** pika_image_get_selected_vectors (PikaImage *image, gint *num_vectors) { PikaValueArray *args; PikaValueArray *return_vals; PikaVectors **vectors = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-selected-vectors", args); pika_value_array_unref (args); *num_vectors = 0; if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) { *num_vectors = PIKA_VALUES_GET_INT (return_vals, 1); { PikaObjectArray *a = g_value_get_boxed (pika_value_array_index (return_vals, 2)); if (a) vectors = g_memdup2 (a->data, a->length * sizeof (gpointer)); }; } pika_value_array_unref (return_vals); return vectors; } /** * pika_image_set_selected_vectors: * @image: The image. * @num_vectors: The number of vectors to select. * @vectors: (array length=num_vectors) (element-type PikaVectors): The list of vectors to select. * * Sets the specified image's selected vectors. * * The vectors are set as the selected vectors in the image. * * Returns: TRUE on success. * * Since: 3.0.0 **/ gboolean pika_image_set_selected_vectors (PikaImage *image, gint num_vectors, const PikaVectors **vectors) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_INT, num_vectors, PIKA_TYPE_OBJECT_ARRAY, NULL, G_TYPE_NONE); pika_value_set_object_array (pika_value_array_index (args, 2), PIKA_TYPE_VECTORS, (GObject **) vectors, num_vectors); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-set-selected-vectors", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_selected_drawables: * @image: The image. * @num_drawables: (out): The number of selected drawables in the image. * * Get the image's selected drawables * * This procedure returns the list of selected drawable in the * specified image. This can be either layers, channels, or a layer * mask. * The active drawables are the active image channels. If there are * none, these are the active image layers. 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. * * Returns: (array length=num_drawables) (element-type PikaItem) (transfer container): * The list of selected drawables in the image. * The returned value must be freed with g_free(). * * Since: 3.0.0 **/ PikaItem ** pika_image_get_selected_drawables (PikaImage *image, gint *num_drawables) { PikaValueArray *args; PikaValueArray *return_vals; PikaItem **drawables = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-selected-drawables", args); pika_value_array_unref (args); *num_drawables = 0; if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) { *num_drawables = PIKA_VALUES_GET_INT (return_vals, 1); { PikaObjectArray *a = g_value_get_boxed (pika_value_array_index (return_vals, 2)); if (a) drawables = g_memdup2 (a->data, a->length * sizeof (gpointer)); }; } pika_value_array_unref (return_vals); return drawables; } /** * pika_image_get_selection: * @image: The image. * * Returns the specified image's selection. * * This will always return a valid ID for a selection -- which is * represented as a channel internally. * * Returns: (transfer none): The selection channel. **/ PikaSelection * pika_image_get_selection (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; PikaSelection *selection = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-selection", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) selection = PIKA_VALUES_GET_SELECTION (return_vals, 1); pika_value_array_unref (return_vals); return selection; } /** * pika_image_get_component_active: * @image: The image. * @component: The image component. * * Returns if the specified image's image component is active. * * 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. * * Returns: Component is active. **/ gboolean pika_image_get_component_active (PikaImage *image, PikaChannelType component) { PikaValueArray *args; PikaValueArray *return_vals; gboolean active = FALSE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_CHANNEL_TYPE, component, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-component-active", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) active = PIKA_VALUES_GET_BOOLEAN (return_vals, 1); pika_value_array_unref (return_vals); return active; } /** * pika_image_set_component_active: * @image: The image. * @component: The image component. * @active: Component is active. * * Sets if the specified image's image component is active. * * 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. * * Returns: TRUE on success. **/ gboolean pika_image_set_component_active (PikaImage *image, PikaChannelType component, gboolean active) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_CHANNEL_TYPE, component, G_TYPE_BOOLEAN, active, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-set-component-active", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_component_visible: * @image: The image. * @component: The image component. * * Returns if the specified image's image component is visible. * * 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. * * Returns: Component is visible. **/ gboolean pika_image_get_component_visible (PikaImage *image, PikaChannelType component) { PikaValueArray *args; PikaValueArray *return_vals; gboolean visible = FALSE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_CHANNEL_TYPE, component, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-component-visible", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) visible = PIKA_VALUES_GET_BOOLEAN (return_vals, 1); pika_value_array_unref (return_vals); return visible; } /** * pika_image_set_component_visible: * @image: The image. * @component: The image component. * @visible: Component is visible. * * Sets if the specified image's image component is visible. * * 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. * * Returns: TRUE on success. **/ gboolean pika_image_set_component_visible (PikaImage *image, PikaChannelType component, gboolean visible) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_CHANNEL_TYPE, component, G_TYPE_BOOLEAN, visible, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-set-component-visible", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_file: * @image: The image. * * Returns the file for the specified image. * * 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 pika-image-get-imported-file to get the * current file if it was imported from a non-PIKA file format and not * yet saved, or pika-image-get-exported-file if the image has been * exported to a non-PIKA file format. * * Returns: (transfer full): The file. * * Since: 2.8 **/ GFile * pika_image_get_file (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; GFile *file = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-file", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) file = PIKA_VALUES_DUP_FILE (return_vals, 1); pika_value_array_unref (return_vals); return file; } /** * pika_image_set_file: * @image: The image. * @file: The new image file. * * Sets the specified XCF image's file. * * This procedure sets the specified image's file. * This is to set the XCF file associated with your image. In * particular, do not use this function to set the imported file in * file import plug-ins. This is done by the core process. * * Returns: TRUE on success. **/ gboolean pika_image_set_file (PikaImage *image, GFile *file) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_FILE, file, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-set-file", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_xcf_file: * @image: The image. * * Returns the XCF file for the specified image. * * This procedure returns the XCF file associated with the image. If * there is no such file, this procedure returns %NULL. * * Returns: (transfer full): The imported XCF file. * * Since: 2.8 **/ GFile * pika_image_get_xcf_file (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; GFile *file = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-xcf-file", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) file = PIKA_VALUES_DUP_FILE (return_vals, 1); pika_value_array_unref (return_vals); return file; } /** * pika_image_get_imported_file: * @image: The image. * * Returns the imported file for the specified image. * * This procedure returns the file associated with the specified image * if the image was imported from a non-native Pika format. If the * image was not imported, or has since been saved in the native Gimp * format, this procedure returns %NULL. * * Returns: (transfer full): The imported file. * * Since: 2.8 **/ GFile * pika_image_get_imported_file (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; GFile *file = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-imported-file", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) file = PIKA_VALUES_DUP_FILE (return_vals, 1); pika_value_array_unref (return_vals); return file; } /** * pika_image_get_exported_file: * @image: The image. * * Returns the exported file for the specified image. * * This procedure returns the file associated with the specified image * if the image was exported a non-native PIKA format. If the image was * not exported, this procedure returns %NULL. * * Returns: (transfer full): The exported file. * * Since: 2.8 **/ GFile * pika_image_get_exported_file (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; GFile *file = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-exported-file", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) file = PIKA_VALUES_DUP_FILE (return_vals, 1); pika_value_array_unref (return_vals); return file; } /** * pika_image_get_name: * @image: The image. * * Returns the specified image's name. * * 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. * * Returns: (transfer full): The name. * The returned value must be freed with g_free(). **/ gchar * pika_image_get_name (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gchar *name = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-name", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) name = PIKA_VALUES_DUP_STRING (return_vals, 1); pika_value_array_unref (return_vals); return name; } /** * pika_image_get_resolution: * @image: The image. * @xresolution: (out): The resolution in the x-axis, in dots per inch. * @yresolution: (out): The resolution in the y-axis, in dots per inch. * * Returns the specified image's resolution. * * This procedure returns the specified image's resolution in dots per * inch. This value is independent of any of the layers in this image. * * Returns: TRUE on success. **/ gboolean pika_image_get_resolution (PikaImage *image, gdouble *xresolution, gdouble *yresolution) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-resolution", args); pika_value_array_unref (args); *xresolution = 0.0; *yresolution = 0.0; success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; if (success) { *xresolution = PIKA_VALUES_GET_DOUBLE (return_vals, 1); *yresolution = PIKA_VALUES_GET_DOUBLE (return_vals, 2); } pika_value_array_unref (return_vals); return success; } /** * pika_image_set_resolution: * @image: The image. * @xresolution: The new image resolution in the x-axis, in dots per inch. * @yresolution: The new image resolution in the y-axis, in dots per inch. * * Sets the specified image's resolution. * * This procedure sets the specified image's resolution in dots per * inch. This value is independent of any of the layers in this image. * No scaling or resizing is performed. * * Returns: TRUE on success. **/ gboolean pika_image_set_resolution (PikaImage *image, gdouble xresolution, gdouble yresolution) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_DOUBLE, xresolution, G_TYPE_DOUBLE, yresolution, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-set-resolution", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_unit: * @image: The image. * * Returns the specified image's unit. * * This procedure returns the specified image's unit. This value is * independent of any of the layers in this image. See the * pika_unit_*() procedure definitions for the valid range of unit IDs * and a description of the unit system. * * Returns: (transfer none): The unit. **/ PikaUnit pika_image_get_unit (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; PikaUnit unit = PIKA_UNIT_PIXEL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-unit", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) unit = PIKA_VALUES_GET_INT (return_vals, 1); pika_value_array_unref (return_vals); return unit; } /** * pika_image_set_unit: * @image: The image. * @unit: The new image unit. * * Sets the specified image's unit. * * 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 image. See the pika_unit_*() procedure definitions * for the valid range of unit IDs and a description of the unit * system. * * Returns: TRUE on success. **/ gboolean pika_image_set_unit (PikaImage *image, PikaUnit unit) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_UNIT, unit, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-set-unit", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_tattoo_state: * @image: The image. * * Returns the tattoo state associated with the image. * * This procedure returns the tattoo state of the image. Use only by * save/load plug-ins that wish to preserve an images tattoo state. * Using this function at other times will produce unexpected results. * * Returns: The tattoo state. **/ guint pika_image_get_tattoo_state (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; guint tattoo_state = 0; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-tattoo-state", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) tattoo_state = PIKA_VALUES_GET_UINT (return_vals, 1); pika_value_array_unref (return_vals); return tattoo_state; } /** * pika_image_set_tattoo_state: * @image: The image. * @tattoo_state: The new image tattoo state. * * Set the tattoo state associated with the image. * * This procedure sets the tattoo state of the image. Use only by * save/load plug-ins that wish to preserve an images tattoo state. * Using 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. * * Returns: TRUE on success. **/ gboolean pika_image_set_tattoo_state (PikaImage *image, guint tattoo_state) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_UINT, tattoo_state, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-set-tattoo-state", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_layer_by_tattoo: * @image: The image. * @tattoo: The tattoo of the layer to find. * * Find a layer with a given tattoo in an image. * * This procedure returns the layer with the given tattoo in the * specified image. * * Returns: (transfer none): The layer with the specified tattoo. **/ PikaLayer * pika_image_get_layer_by_tattoo (PikaImage *image, guint tattoo) { PikaValueArray *args; PikaValueArray *return_vals; PikaLayer *layer = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_UINT, tattoo, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-layer-by-tattoo", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) layer = PIKA_VALUES_GET_LAYER (return_vals, 1); pika_value_array_unref (return_vals); return layer; } /** * pika_image_get_channel_by_tattoo: * @image: The image. * @tattoo: The tattoo of the channel to find. * * Find a channel with a given tattoo in an image. * * This procedure returns the channel with the given tattoo in the * specified image. * * Returns: (transfer none): The channel with the specified tattoo. **/ PikaChannel * pika_image_get_channel_by_tattoo (PikaImage *image, guint tattoo) { PikaValueArray *args; PikaValueArray *return_vals; PikaChannel *channel = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_UINT, tattoo, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-channel-by-tattoo", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) channel = PIKA_VALUES_GET_CHANNEL (return_vals, 1); pika_value_array_unref (return_vals); return channel; } /** * pika_image_get_vectors_by_tattoo: * @image: The image. * @tattoo: The tattoo of the vectors to find. * * Find a vectors with a given tattoo in an image. * * This procedure returns the vectors with the given tattoo in the * specified image. * * Returns: (transfer none): The vectors with the specified tattoo. * * Since: 2.6 **/ PikaVectors * pika_image_get_vectors_by_tattoo (PikaImage *image, guint tattoo) { PikaValueArray *args; PikaValueArray *return_vals; PikaVectors *vectors = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_UINT, tattoo, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-vectors-by-tattoo", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) vectors = PIKA_VALUES_GET_VECTORS (return_vals, 1); pika_value_array_unref (return_vals); return vectors; } /** * pika_image_get_layer_by_name: * @image: The image. * @name: The name of the layer to find. * * Find a layer with a given name in an image. * * This procedure returns the layer with the given name in the * specified image. * * Returns: (transfer none): The layer with the specified name. * * Since: 2.8 **/ PikaLayer * pika_image_get_layer_by_name (PikaImage *image, const gchar *name) { PikaValueArray *args; PikaValueArray *return_vals; PikaLayer *layer = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_STRING, name, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-layer-by-name", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) layer = PIKA_VALUES_GET_LAYER (return_vals, 1); pika_value_array_unref (return_vals); return layer; } /** * pika_image_get_channel_by_name: * @image: The image. * @name: The name of the channel to find. * * Find a channel with a given name in an image. * * This procedure returns the channel with the given name in the * specified image. * * Returns: (transfer none): The channel with the specified name. * * Since: 2.8 **/ PikaChannel * pika_image_get_channel_by_name (PikaImage *image, const gchar *name) { PikaValueArray *args; PikaValueArray *return_vals; PikaChannel *channel = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_STRING, name, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-channel-by-name", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) channel = PIKA_VALUES_GET_CHANNEL (return_vals, 1); pika_value_array_unref (return_vals); return channel; } /** * pika_image_get_vectors_by_name: * @image: The image. * @name: The name of the vectors to find. * * Find a vectors with a given name in an image. * * This procedure returns the vectors with the given name in the * specified image. * * Returns: (transfer none): The vectors with the specified name. * * Since: 2.8 **/ PikaVectors * pika_image_get_vectors_by_name (PikaImage *image, const gchar *name) { PikaValueArray *args; PikaValueArray *return_vals; PikaVectors *vectors = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_STRING, name, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-vectors-by-name", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) vectors = PIKA_VALUES_GET_VECTORS (return_vals, 1); pika_value_array_unref (return_vals); return vectors; } /** * pika_image_attach_parasite: * @image: The image. * @parasite: The parasite to attach to an image. * * Add a parasite to an image. * * This procedure attaches a parasite to an image. It has no return * values. * * Returns: TRUE on success. * * Since: 2.8 **/ gboolean pika_image_attach_parasite (PikaImage *image, const PikaParasite *parasite) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, PIKA_TYPE_PARASITE, parasite, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-attach-parasite", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_detach_parasite: * @image: The image. * @name: The name of the parasite to detach from an image. * * Removes a parasite from an image. * * This procedure detaches a parasite from an image. It has no return * values. * * Returns: TRUE on success. * * Since: 2.8 **/ gboolean pika_image_detach_parasite (PikaImage *image, const gchar *name) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_STRING, name, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-detach-parasite", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_get_parasite: * @image: The image. * @name: The name of the parasite to find. * * Look up a parasite in an image * * Finds and returns the parasite that was previously attached to an * image. * * Returns: (transfer full): The found parasite. * * Since: 2.8 **/ PikaParasite * pika_image_get_parasite (PikaImage *image, const gchar *name) { PikaValueArray *args; PikaValueArray *return_vals; PikaParasite *parasite = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_STRING, name, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-parasite", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) parasite = PIKA_VALUES_DUP_PARASITE (return_vals, 1); pika_value_array_unref (return_vals); return parasite; } /** * pika_image_get_parasite_list: * @image: The image. * * List all parasites. * * Returns a list of the names of all currently attached parasites. * These names can later be used to get the actual #PikaParasite with * pika_image_get_parasite() when needed. * * Returns: (array zero-terminated=1) (transfer full): * The names of currently attached parasites. * The returned value must be freed with g_strfreev(). * * Since: 2.8 **/ gchar ** pika_image_get_parasite_list (PikaImage *image) { PikaValueArray *args; PikaValueArray *return_vals; gchar **parasites = NULL; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-get-parasite-list", args); pika_value_array_unref (args); if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS) parasites = PIKA_VALUES_DUP_STRV (return_vals, 1); pika_value_array_unref (return_vals); return parasites; } /** * pika_image_policy_rotate: * @image: The image. * @interactive: Querying the user through a dialog is a possibility. * * Execute the \"Orientation\" metadata policy. * * Process the image according to the rotation policy as set in * Preferences. If PIKA 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. * * Returns: TRUE on success. * * Since: 3.0 **/ gboolean pika_image_policy_rotate (PikaImage *image, gboolean interactive) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_BOOLEAN, interactive, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-policy-rotate", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; } /** * pika_image_policy_color_profile: * @image: The image. * @interactive: Querying the user through a dialog is a possibility. * * Execute the color profile conversion policy. * * Process the image according to the color profile policy as set in * Preferences. * If PIKA is running as a GUI and interactive is TRUE, a dialog may be * 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`. * This function should be used only if you want to follow user * settings. If you intend to convert to a specific profile, call * preferably pika_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. * * Returns: TRUE on success. * * Since: 3.0 **/ gboolean pika_image_policy_color_profile (PikaImage *image, gboolean interactive) { PikaValueArray *args; PikaValueArray *return_vals; gboolean success = TRUE; args = pika_value_array_new_from_types (NULL, PIKA_TYPE_IMAGE, image, G_TYPE_BOOLEAN, interactive, G_TYPE_NONE); return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (), "pika-image-policy-color-profile", args); pika_value_array_unref (args); success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS; pika_value_array_unref (return_vals); return success; }