### Method

# Vips Image linear

#### Declaration [src]

    int
    vips_linear (
      VipsImage* in,
      VipsImage** out,
      const double* a,
      const double* b,
      int n,
      ...
    )

#### Description [src]

Pass an image through a linear transform, ie. (`out` = `in` * `a` + `b`). Output is float for integer input, double for double input, complex for complex input and double complex for double complex input. Set `uchar` to output uchar pixels.

If the arrays of constants have just one element, that constant is used for all image bands. If the arrays have more than one element and they have the same number of elements as there are bands in the image, then one array element is used for each band. If the arrays have more than one element and the image only has a single band, the result is a many-band image where each band corresponds to one array element.

Optional arguments

- `uchar`: `gboolean`, output uchar pixels

See also

`vips_linear1()`, `vips_add()`.

This method is not directly available to language bindings.

#### Parameters

`out`

  Type: `VipsImage`

  Output image.

  The argument will be set by the function.
  The caller of the method takes ownership of the returned data, and is responsible for freeing it.

`a`

  Type: An array of `double`

  Array of constants for multiplication.

  The length of the array is specified in the `n` argument.
  The data is owned by the caller of the method.

`b`

  Type: An array of `double`

  Array of constants for addition.

  The length of the array is specified in the `n` argument.
  The data is owned by the caller of the method.

`n`

  Type: `int`

  Length of constant arrays.

`...`

  Type: ``

  `NULL`-terminated list of optional named arguments.

#### Return value

Type: `int`

0 on success, -1 on error.