home *** CD-ROM | disk | FTP | other *** search
- /* The GIMP -- an image manipulation program
- * Copyright (C) 1995 Spencer Kimball and Peter Mattis
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (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
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
- /*
- * gaussian_blur_region no longer does combination; arguments changed
- * -- scott@poverty.bloomington.in.us, 16Oct97
- */
-
- #ifndef __PAINT_FUNCS_H__
- #define __PAINT_FUNCS_H__
-
- #include "apptypes.h"
- #include "pixel_region.h"
-
-
- /* Called initially to setup accelerated rendering features */
- void paint_funcs_setup (void);
- void paint_funcs_free (void);
-
- void paint_funcs_invalidate_color_hash_table (GimpImage* gimage,
- gint index);
-
- /* Paint functions */
-
- void color_pixels (unsigned char *dest, const unsigned char *color,
- int w, int bytes);
-
- void blend_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- int blend, int w, int bytes, int has_alpha);
-
- void shade_pixels (const unsigned char *src, unsigned char *dest,
- const unsigned char *color,
- int blend, int w, int bytes, int has_alpha);
-
- void extract_alpha_pixels (const unsigned char *src,
- const unsigned char *mask,
- unsigned char *dest,
- int w, int bytes);
-
- void darken_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest, int length,
- int bytes1, int bytes2,
- int has_alpha1, int has_alpha2);
-
- void lighten_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest, int length,
- int bytes1, int bytes2,
- int has_alpha1, int has_alpha2);
-
- void hsv_only_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest, int mode, int length,
- int bytes1, int bytes2,
- int has_alpha1, int has_alpha2);
-
- void color_only_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest, int mode, int length,
- int bytes1, int bytes2,
- int has_alpha1, int has_alpha2);
-
- void multiply_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest, int length,
- int bytes1, int bytes2,
- int has_alpha1, int has_alpha2);
-
- void divide_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest, int length,
- int bytes1, int bytes2,
- int has_alpha1, int has_alpha2);
-
- void screen_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest, int length,
- int bytes1, int bytes2,
- int has_alpha1, int has_alpha2);
-
- void overlay_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest, int length,
- int bytes1, int bytes2,
- int has_alpha1, int has_alpha2);
-
- void add_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest, int length,
- int bytes1, int bytes2,
- int has_alpha1, int has_alpha2);
-
- void subtract_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest, int length,
- int bytes1, int bytes2,
- int has_alpha1, int has_alpha2);
-
- void difference_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest, int length,
- int bytes1, int bytes2,
- int has_alpha1, int has_alpha2);
-
- void dissolve_pixels (const unsigned char *src,
- unsigned char *dest, int x, int y,
- int opacity, int length, int sb, int db,
- int has_alpha);
-
- void swap_pixels (unsigned char *src, unsigned char *dest,
- int length);
-
- void scale_pixels (const unsigned char *src, unsigned char *dest,
- int length, int scale);
-
- void add_alpha_pixels (const unsigned char *src, unsigned char *dest,
- int length, int bytes);
-
- void flatten_pixels (const unsigned char *src, unsigned char *dest,
- const unsigned char *bg, int length, int bytes);
-
- void gray_to_rgb_pixels (const unsigned char *src, unsigned char *dest,
- int length, int bytes);
-
-
- /* apply the mask data to the alpha channel of the pixel data */
- void apply_mask_to_alpha_channel (unsigned char *src,
- const unsigned char *mask,
- int opacity, int length, int bytes);
-
- /* combine the mask data with the alpha channel of the pixel data */
- void combine_mask_and_alpha_channel (unsigned char *src,
- const unsigned char *mask,
- int opacity, int length, int bytes);
-
-
- /* copy gray pixels to intensity-alpha pixels. This function
- * essentially takes a source that is only a grayscale image and
- * copies it to the destination, expanding to RGB if necessary and
- * adding an alpha channel. (OPAQUE)
- */
- void copy_gray_to_inten_a_pixels (const unsigned char *src,
- unsigned char *dest,
- int length, int bytes);
-
- /* lay down the initial pixels in the case of only one
- * channel being visible and no layers...In this singular
- * case, we want to display a grayscale image w/o transparency
- */
- void initial_channel_pixels (const unsigned char *src,
- unsigned char *dest,
- int length, int bytes);
-
- /* lay down the initial pixels in the case of an indexed image.
- * This process obviously requires no composition
- */
- void initial_indexed_pixels (const unsigned char *src,
- unsigned char *dest,
- const unsigned char *cmap,
- int length);
-
- /* lay down the initial pixels in the case of an indexed image.
- * This process obviously requires no composition
- */
- void initial_indexed_a_pixels (const unsigned char *src,
- unsigned char *dest,
- const unsigned char *mask,
- const unsigned char *cmap,
- int opacity, int length);
-
- /* lay down the initial pixels for the base layer.
- * This process obviously requires no composition.
- */
- void initial_inten_pixels (const unsigned char *src,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity, const int *affect,
- int length, int bytes);
-
- /* lay down the initial pixels for the base layer.
- * This process obviously requires no composition.
- */
- void initial_inten_a_pixels (const unsigned char *src,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity, const int *affect,
- int length, int bytes);
-
- /* combine indexed images with an optional mask which
- * is interpreted as binary...destination is indexed...
- */
- void combine_indexed_and_indexed_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity, const int *affect,
- int length, int bytes);
-
- /* combine indexed images with indexed-alpha images
- * result is an indexed image
- */
- void combine_indexed_and_indexed_a_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity,
- const int *affect,
- int length,
- int bytes);
-
- /* combine indexed-alpha images with indexed-alpha images
- * result is an indexed-alpha image. use this for painting
- * to an indexed floating sel
- */
- void combine_indexed_a_and_indexed_a_pixels(const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity,
- const int *affect,
- int length,
- int bytes);
-
- /* combine intensity with indexed, destination is
- * intensity-alpha...use this for an indexed floating sel
- */
- void combine_inten_a_and_indexed_a_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- const unsigned char *cmap,
- int opacity,
- int length,
- int bytes);
-
- /* combine RGB image with RGB or GRAY with GRAY
- * destination is intensity-only...
- */
- void combine_inten_and_inten_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity,
- const int *affect,
- int length,
- int bytes);
-
- /* combine an RGBA or GRAYA image with an RGB or GRAY image
- * destination is intensity-only...
- */
- void combine_inten_and_inten_a_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity, const int *affect,
- int length, int bytes);
-
- /* combine an RGB or GRAY image with an RGBA or GRAYA image
- * destination is intensity-alpha...
- */
- void combine_inten_a_and_inten_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity, const int *affect,
- int mode_affect, int length,
- int bytes);
-
- /* combine an RGBA or GRAYA image with an RGBA or GRAYA image
- * destination is of course intensity-alpha...
- */
- void combine_inten_a_and_inten_a_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity,
- const int *affect,
- int mode_affect,
- int length,
- int bytes);
-
- /* combine a channel with intensity-alpha pixels based
- * on some opacity, and a channel color...
- * destination is intensity-alpha
- */
- void combine_inten_a_and_channel_mask_pixels(const unsigned char *src,
- const unsigned char *channel,
- unsigned char *dest,
- const unsigned char *col,
- int opacity,
- int length,
- int bytes);
-
- void combine_inten_a_and_channel_selection_pixels(const unsigned char *src,
- const unsigned char *channel,
- unsigned char *dest,
- const unsigned char *col,
- int opacity,
- int length,
- int bytes);
-
- /* paint "behind" the existing pixel row.
- * This is similar in appearance to painting on a layer below
- * the existing pixels.
- */
- void behind_inten_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity,
- const int *affect,
- int length,
- int bytes1,
- int bytes2,
- int has_alpha1,
- int has_alpha2);
-
- /* paint "behind" the existing pixel row (for indexed images).
- * This is similar in appearance to painting on a layer below
- * the existing pixels.
- */
- void behind_indexed_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity,
- const int *affect,
- int length,
- int bytes1,
- int bytes2,
- int has_alpha1,
- int has_alpha2);
-
- /* replace the contents of one pixel row with the other
- * The operation is still bounded by mask/opacity constraints
- */
- void replace_inten_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity,
- const int *affect,
- int length,
- int bytes1,
- int bytes2,
- int has_alpha1,
- int has_alpha2);
-
- /* replace the contents of one pixel row with the other
- * The operation is still bounded by mask/opacity constraints
- */
- void replace_indexed_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity,
- const int *affect,
- int length,
- int bytes1,
- int bytes2,
- int has_alpha1,
- int has_alpha2);
-
- /* apply source 2 to source 1, but in a non-additive way,
- * multiplying alpha channels (works for intensity)
- */
- void erase_inten_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity,
- const int *affect,
- int length,
- int bytes);
-
- /* apply source 2 to source 1, but in a non-additive way,
- * multiplying alpha channels (works for indexed)
- */
- void erase_indexed_pixels (const unsigned char *src1,
- const unsigned char *src2,
- unsigned char *dest,
- const unsigned char *mask,
- int opacity,
- const int *affect,
- int length,
- int bytes);
-
- /* extract information from intensity pixels based on
- * a mask.
- */
- void extract_from_inten_pixels (unsigned char *src,
- unsigned char *dest,
- const unsigned char *mask,
- const unsigned char *bg,
- int cut,
- int length,
- int bytes,
- int has_alpha);
-
- /* extract information from indexed pixels based on
- * a mask.
- */
- void extract_from_indexed_pixels (unsigned char *src,
- unsigned char *dest,
- const unsigned char *mask,
- const unsigned char *cmap,
- const unsigned char *bg,
- int cut,
- int length,
- int bytes,
- int has_alpha);
-
-
- /* variable source to RGB color mapping
- * src_type == 0 (RGB)
- * src_type == 1 (GRAY)
- * src_type == 2 (INDEXED)
- */
- void
- map_to_color (int src_type,
- const unsigned char *cmap,
- const unsigned char *src,
- unsigned char *rgb);
-
-
- /* RGB to index mapping functions...
- *
- * Hash table lookup speeds up the standard
- * least squares method
- */
- int map_rgb_to_indexed (const unsigned char *cmap,
- int num_cols, GimpImage* gimage,
- int r, int g, int b);
-
-
- /* Region functions */
- void color_region (PixelRegion *dest,
- const unsigned char *color);
-
-
- void blend_region (PixelRegion *, PixelRegion *,
- PixelRegion *, int);
-
- void shade_region (PixelRegion *, PixelRegion *,
- unsigned char *, int);
-
- void copy_region (PixelRegion *, PixelRegion *);
-
- void add_alpha_region (PixelRegion *, PixelRegion *);
-
- void flatten_region (PixelRegion *, PixelRegion *,
- unsigned char *);
-
- void extract_alpha_region (PixelRegion *, PixelRegion *,
- PixelRegion *);
-
- void extract_from_region (PixelRegion *, PixelRegion *,
- PixelRegion *, unsigned char *,
- unsigned char *, int, int, int);
-
-
- void convolve_region (PixelRegion *,
- PixelRegion *,
- int *, int, int,
- ConvolutionType);
-
- void multiply_alpha_region (PixelRegion *);
-
- void separate_alpha_region (PixelRegion *);
-
- void gaussian_blur_region (PixelRegion *, double, double);
-
- void border_region (PixelRegion *, gint16, gint16);
-
- void scale_region (PixelRegion *, PixelRegion *);
-
- void scale_region_no_resample (PixelRegion *, PixelRegion *);
-
- void subsample_region (PixelRegion *, PixelRegion *,
- int);
-
- float shapeburst_region (PixelRegion *, PixelRegion *);
-
- void thin_region (PixelRegion *, gint16 xradius,
- gint16 yradius, int edge_lock);
-
- void fatten_region (PixelRegion *,
- gint16 xradius, gint16 yradius);
-
- void swap_region (PixelRegion *, PixelRegion *);
-
-
- /* Apply a mask to an image's alpha channel */
- void apply_mask_to_region (PixelRegion *, PixelRegion *, int);
-
- /* Combine a mask with an image's alpha channel */
- void combine_mask_and_region (PixelRegion *, PixelRegion *, int);
-
- /* Copy a gray image to an intensity-alpha region */
- void copy_gray_to_region (PixelRegion *, PixelRegion *);
-
- /* Lay down the groundwork for layer construction...
- * This includes background images for indexed or non-alpha
- * images, floating selections, selective display of intensity
- * channels, and display of arbitrary mask channels
- */
- #define INITIAL_CHANNEL_MASK 0
- #define INITIAL_CHANNEL_SELECTION 1
- #define INITIAL_INDEXED 2
- #define INITIAL_INDEXED_ALPHA 3
- #define INITIAL_INTENSITY 4
- #define INITIAL_INTENSITY_ALPHA 5
-
- /* Combine two source regions with the help of an optional mask
- * region into a destination region. This is used for constructing
- * layer projections, and for applying image patches to an image
- */
- #define COMBINE_INDEXED_INDEXED 0
- #define COMBINE_INDEXED_INDEXED_A 1
- #define COMBINE_INDEXED_A_INDEXED_A 2
- #define COMBINE_INTEN_A_INDEXED_A 3
- #define COMBINE_INTEN_A_CHANNEL_MASK 4
- #define COMBINE_INTEN_A_CHANNEL_SELECTION 5
- #define COMBINE_INTEN_INTEN 6
- #define COMBINE_INTEN_INTEN_A 7
- #define COMBINE_INTEN_A_INTEN 8
- #define COMBINE_INTEN_A_INTEN_A 9
-
- /* Non-conventional combination modes */
- #define BEHIND_INTEN 20
- #define BEHIND_INDEXED 21
- #define REPLACE_INTEN 22
- #define REPLACE_INDEXED 23
- #define ERASE_INTEN 24
- #define ERASE_INDEXED 25
- #define ANTI_ERASE_INTEN 26
- #define ANTI_ERASE_INDEXED 27
- #define NO_COMBINATION 28
-
- /* Opacities */
- #define TRANSPARENT_OPACITY 0
- #define OPAQUE_OPACITY 255
-
- void initial_region (PixelRegion *, PixelRegion *,
- PixelRegion *, unsigned char *,
- int, LayerModeEffects, int *, int);
-
- void combine_regions (PixelRegion *, PixelRegion *,
- PixelRegion *, PixelRegion *,
- unsigned char *, int,
- LayerModeEffects,
- int *, int);
-
- void combine_regions_replace (PixelRegion *, PixelRegion *,
- PixelRegion *, PixelRegion *,
- unsigned char *,
- int, int *, int);
-
-
- /* Applying layer modes... */
-
- int apply_layer_mode (unsigned char *, unsigned char *,
- unsigned char **, int, int, int,
- int,
- LayerModeEffects,
- int, int, int, int, int *);
-
- int apply_indexed_layer_mode (unsigned char *, unsigned char *,
- unsigned char **,
- LayerModeEffects, int, int);
-
- #endif /* __PAINT_FUNCS_H__ */
-