Man Linux: Main Page and Category List

NAME

       im_add, im_gadd, im_gaddim, im_gfadd - add two images

SYNOPSIS

       #include <vips/vips.h>

       int im_add(in1, in2, out)
       IMAGE *in1, *in2, *out;

       int im_gadd(a, in1, b, in2, c, out)
       double a, b, c;
       IMAGE *in1, *in2, *out;

       int im_gaddim(a, in1, b, in2, c, out)
       double a, b, c;
       IMAGE *in1, *in2, *out;

       int im_gfadd(a, in1, b, in2, c, out)
       double a, b, c;
       IMAGE *in1, *in2, *out;

DESCRIPTION

       These functions operate on two images held by image descriptors in1 and
       in2 and write the result to the image descriptor out.  Input images in1
       and  in2  should have the same channels and the same size; however they
       can be of different types.  Only the history of  the  image  descriptor
       pointed by in1 is copied to out.

       im_add(3)

       For two integer images, add the two images and write the output as

        in1    - uchar   char   ushort  short  uint  int
        -------|-----------------------------------------
        in2    |
        uchar  | ushort  short  ushort  short  uint  int
        char   | short   short  short   short  int   int
        ushort | ushort  short  ushort  short  uint  int
        short  | short   short  short   short  int   int
        uint   | uint    int    uint    int    uint  int
        int    | int     int    int     int    int   int

       If  one  or  more of the images is a floating point type, the output is
       FMTFLOAT, unless one or more of the inputs is FMTDOUBLE, in which  case
       the output is also FMTDOUBLE.

       If  one  or  more  of  the  images  is  a  complex  type, the output is
       FMTCOMPLEX, unless one or more of the inputs is FMTDPCOMPLEX, in  which
       case the output is also FMTDPCOMPLEX.

       im_gadd(3)  performs  generalised  addition  of  two  images by calling
       im_gaddim(3) and im_gfadd(3).  These are very old and tired things, and
       should not be used.

       Input  should  be  non  complex.   Output depends on input according to
       function called.  The result at each point is: a * pel1 + b * pel2 + c,
       properly  rounded  if  necessary.   Pel1 and pel2 are the corresponding
       pixels from in1 and in2 respectively.

       im_gaddim() performs generalised  addition  of  in1  and  in2,  on  the
       condition they are neither float nor double nor complex.  The format of
       the resultant image is given by the table:

        in1    - uchar   char   ushort  short  uint  int
        -------|-----------------------------------------
        in2    |
        uchar  | ushort  short  ushort  short  uint  int
        char   | short   short  short   short  int   int
        ushort | ushort  short  ushort  short  uint  int
        short  | short   short  short   short  int   int
        uint   | uint    int    uint    int    uint  int
        int    | int     int    int     int    int   int

       The result at each point is: a * pel1 + b * pel2 + c, properly rounded.
       Pel1   and   pel2  are  the  corresponding  pixels  from  in1  and  in2
       respectively.

       im_gfadd(3) adds the non-complex images pointed by in1 and in2.  Result
       is  float except if one (or both) inputs is double.  In the latter case
       the result is double.  The result at each point is: a * pel1 + b * pel2
       +  c.   Pel1  and  pel2  are  the corresponding pixels from in1 and in2
       respectively.

BUGS

       None of the functions checks the result for over/underflow.

RETURN VALUE

       All functions return 0 on success and -1 on error.

SEE ALSO

       im_subtract(3), im_lintra(3), im_multiply(3).

AUTHOR

       N. Dessipris - 22/04/1991
       J. Cupitt, im_add(), - 21/7/93

                                 24 April 1991                     ADDITION(3)