Common Pipeline Library Reference Manual  5.3.1
Functions
Masks of pixels

Functions

cpl_error_code cpl_mask_and (cpl_mask *in1, const cpl_mask *in2)
 Performs a logical AND of one mask onto another.
cpl_error_code cpl_mask_closing (cpl_mask *in, const cpl_matrix *ker)
 Compute a morphological closing.
cpl_mask * cpl_mask_collapse_create (const cpl_mask *in, int dir)
 Collapse a mask.
cpl_error_code cpl_mask_copy (cpl_mask *in1, const cpl_mask *in2, int x_pos, int y_pos)
 Insert a mask in an other one.
int cpl_mask_count (const cpl_mask *in)
 Get the number of occurences of CPL_BINARY_1.
int cpl_mask_count_window (const cpl_mask *self, int llx, int lly, int urx, int ury)
 Get the number of occurences of CPL_BINARY_1 in a window.
void cpl_mask_delete (cpl_mask *m)
 Delete a cpl_mask.
cpl_error_code cpl_mask_dilation (cpl_mask *in, const cpl_matrix *ker)
 Compute a morphological dilation.
cpl_error_code cpl_mask_dump_window (const cpl_mask *self, int llx, int lly, int urx, int ury, FILE *stream)
 Dump a mask.
cpl_mask * cpl_mask_duplicate (const cpl_mask *in)
 Duplicates a cpl_mask.
cpl_error_code cpl_mask_erosion (cpl_mask *in, const cpl_matrix *ker)
 Compute a morphological erosion.
cpl_mask * cpl_mask_extract (const cpl_mask *in, int llx, int lly, int urx, int ury)
 Extract a mask from an other one.
cpl_mask * cpl_mask_extract_subsample (const cpl_mask *in, int xstep, int ystep)
 Subsample a mask.
cpl_error_code cpl_mask_filter (cpl_mask *self, const cpl_mask *other, const cpl_mask *kernel, cpl_filter_mode filter, cpl_border_mode border)
 Filter a mask using a binary kernel.
cpl_error_code cpl_mask_flip (cpl_mask *in, int angle)
 Flip a mask on a given miror line.
cpl_binary cpl_mask_get (const cpl_mask *in, int xpos, int ypos)
 Get the value of a mask at a given position.
cpl_binary * cpl_mask_get_data (cpl_mask *in)
 Get a pointer to the data part of the mask.
const cpl_binary * cpl_mask_get_data_const (const cpl_mask *in)
 Get a pointer to the data part of the mask.
int cpl_mask_get_size_x (const cpl_mask *in)
 Get the x size of the mask.
int cpl_mask_get_size_y (const cpl_mask *in)
 Get the y size of the mask.
cpl_boolean cpl_mask_is_empty (const cpl_mask *self)
 Return CPL_TRUE iff a mask has no elements set (to CPL_BINARY_1)
cpl_boolean cpl_mask_is_empty_window (const cpl_mask *self, int llx, int lly, int urx, int ury)
 Return CPL_TRUE iff a mask has no elements set in the window.
cpl_error_code cpl_mask_move (cpl_mask *in, int nb_cut, const int *new_pos)
 Reorganize the pixels in a mask.
cpl_error_code cpl_mask_not (cpl_mask *in)
 Performs a logical NOT on a mask.
cpl_error_code cpl_mask_opening (cpl_mask *in, const cpl_matrix *ker)
 Compute a morphological opening.
cpl_error_code cpl_mask_or (cpl_mask *in1, const cpl_mask *in2)
 Performs a logical OR of one mask onto another.
cpl_error_code cpl_mask_set (cpl_mask *self, int xpos, int ypos, cpl_binary value)
 Set a value in a mask at a given position.
cpl_error_code cpl_mask_shift (cpl_mask *self, int dx, int dy)
 Shift a mask.
cpl_mask * cpl_mask_threshold_image_create (const cpl_image *in, double lo_cut, double hi_cut)
 Select parts of an image with provided thresholds.
cpl_error_code cpl_mask_turn (cpl_mask *self, int rot)
 Rotate a mask by a multiple of 90 degrees clockwise.
void * cpl_mask_unwrap (cpl_mask *m)
 Delete a cpl_mask except the data array.
cpl_mask * cpl_mask_wrap (int nx, int ny, cpl_binary *data)
 Create a cpl_mask from existing data.
cpl_error_code cpl_mask_xor (cpl_mask *in1, const cpl_mask *in2)
 Performs a logical XOR of one mask onto another.

Detailed Description

This module provides functions to handle masks of pixels

These masks are useful for object detection routines or bad pixel map handling. Morphological routines (erosion, dilation, closing and opening) and logical operations are provided. A cpl_mask is a kind of binary array whose elements are of type cpl_binary and can take only two values: either CPL_BINARY_0 or CPL_BINARY_1.

The element indexing follows the FITS convention in the sense that the lower left element in a CPL mask has index (1, 1).

Synopsis:
   #include "cpl_mask.h"

Function Documentation

cpl_error_code cpl_mask_and ( cpl_mask *  in1,
const cpl_mask *  in2 
)

Performs a logical AND of one mask onto another.

Parameters:
in1first mask, to be modified
in2second mask
Returns:
CPL_ERROR_NONE on success, otherwise the relevant _cpl_error_code_

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if an input pointer is NULL
  • CPL_ERROR_ILLEGAL_INPUT if the two masks have different sizes
cpl_error_code cpl_mask_closing ( cpl_mask *  in,
const cpl_matrix *  ker 
)

Compute a morphological closing.

Parameters:
ininput mask to filter
kerbinary kernel (0 for 0, any other value is considered as 1)
Returns:
CPL_ERROR_NONE on success or the _cpl_error_code_ on failure
See also:
cpl_mask_filter()
Deprecated:
Replace this call with cpl_mask_filter() using CPL_FILTER_CLOSING and CPL_BORDER_ZERO.
cpl_mask* cpl_mask_collapse_create ( const cpl_mask *  in,
int  dir 
)

Collapse a mask.

Parameters:
ininput mask to collapse
dircollapsing direction
Returns:
the newly allocated mask or NULL in error case
Note:
The returned mask must be deallocated using cpl_mask_delete().

direction 0 collapses along y, producing a nx by 1 mask direction 1 collapses along x, producing a 1 by ny mask

The resulting mask element is set to CPL_BINARY_1 iff all elements of the associated column (resp. row) in the input mask are set to CPL_BINARY_1.

  Direction 0 collapse:

  1 0 1    Input mask.
  0 1 1
  0 0 1
  -----
  0 0 1    Only the third element is set to CPL_BINARY_1 since all input elements
           of that column are set to CPL_BINARY_1.
  

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT
  • CPL_ERROR_ILLEGAL_INPUT
cpl_error_code cpl_mask_copy ( cpl_mask *  in1,
const cpl_mask *  in2,
int  x_pos,
int  y_pos 
)

Insert a mask in an other one.

Parameters:
in1mask in which in2 is inserted
in2mask to insert
x_posthe x pixel position in in1 where the lower left pixel of in2 should go (from 1 to the x size of in1)
y_posthe y pixel position in in1 where the lower left pixel of in2 should go (from 1 to the y size of in1)
Returns:
the _cpl_error_code_ or CPL_ERROR_NONE

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if in1 or in2 is NULL
  • CPL_ERROR_ILLEGAL_INPUT if x_pos, y_pos is outside in1
int cpl_mask_count ( const cpl_mask *  in)

Get the number of occurences of CPL_BINARY_1.

Parameters:
inthe input mask
Returns:
the number of occurences of CPL_BINARY_1 or -1 in error case
See also:
cpl_mask_count_window()

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if (one of) the input pointer(s) is NULL
int cpl_mask_count_window ( const cpl_mask *  self,
int  llx,
int  lly,
int  urx,
int  ury 
)

Get the number of occurences of CPL_BINARY_1 in a window.

Parameters:
selfThe mask to count
llxLower left x position (FITS convention, 1 for leftmost)
llyLower left y position (FITS convention, 1 for lowest)
urxUpper right x position (FITS convention)
uryUpper right y position (FITS convention)
Returns:
the number of occurences of CPL_BINARY_1 or -1 on error

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if an input pointer is NULL
  • CPL_ERROR_ILLEGAL_INPUT if the window coordinates are invalid
void cpl_mask_delete ( cpl_mask *  m)

Delete a cpl_mask.

Parameters:
mcpl_mask to delete
Returns:
void

The function deallocates the memory used by the mask m. If m is NULL, nothing is done, and no error is set.

cpl_error_code cpl_mask_dilation ( cpl_mask *  in,
const cpl_matrix *  ker 
)

Compute a morphological dilation.

Parameters:
ininput mask to filter
kerbinary kernel (0 for 0, any other value is considered as 1)
Returns:
CPL_ERROR_NONE on success or the _cpl_error_code_ on failure
See also:
cpl_mask_filter()
Deprecated:
Replace this call with cpl_mask_filter() using CPL_FILTER_DILATION and CPL_BORDER_ZERO.
cpl_error_code cpl_mask_dump_window ( const cpl_mask *  self,
int  llx,
int  lly,
int  urx,
int  ury,
FILE *  stream 
)

Dump a mask.

Parameters:
selfmask to dump
llxLower left x position (FITS convention, 1 for leftmost)
llyLower left y position (FITS convention, 1 for lowest)
urxUpper right x position (FITS convention)
uryUpper right y position (FITS convention)
streamOutput stream, accepts stdout or stderr
Returns:
CPL_ERROR_NONE or the relevant _cpl_error_code_ on error

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if an input pointer is NULL
  • CPL_ERROR_FILE_IO if a write operation fails
  • CPL_ERROR_ACCESS_OUT_OF_RANGE if the defined window is not in the image
  • CPL_ERROR_ILLEGAL_INPUT if the window definition is wrong (e.g llx > urx)
cpl_mask* cpl_mask_duplicate ( const cpl_mask *  in)

Duplicates a cpl_mask.

Parameters:
inthe mask to duplicate
Returns:
1 newly allocated cpl_mask or NULL in error case

The returned object must be deallocated using cpl_mask_delete().

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if in is NULL
cpl_error_code cpl_mask_erosion ( cpl_mask *  in,
const cpl_matrix *  ker 
)

Compute a morphological erosion.

Parameters:
ininput mask to filter
kerbinary kernel (0 for 0, any other value is considered as 1)
Returns:
CPL_ERROR_NONE on success or the _cpl_error_code_ on failure
See also:
cpl_mask_filter()
Deprecated:
Replace this call with cpl_mask_filter() using CPL_FILTER_EROSION and CPL_BORDER_ZERO.
cpl_mask* cpl_mask_extract ( const cpl_mask *  in,
int  llx,
int  lly,
int  urx,
int  ury 
)

Extract a mask from an other one.

Parameters:
ininput mask
llxLower left x position (FITS convention, 1 for leftmost)
llyLower left y position (FITS convention, 1 for lowest)
urxUpper right x position (FITS convention)
uryUpper right y position (FITS convention)
Returns:
1 newly allocated mask or NULL in error case.

The returned mask must be deallocated using cpl_mask_delete().

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_ILLEGAL_INPUT if the zone falls outside the mask
  • CPL_ERROR_NULL_INPUT if the input mask is NULL
cpl_mask* cpl_mask_extract_subsample ( const cpl_mask *  in,
int  xstep,
int  ystep 
)

Subsample a mask.

Parameters:
ininput mask
xstepTake every xstep pixel in x
ystepTake every ystep pixel in y
Returns:
the newly allocated mask or NULL on error case
See also:
cpl_image_extract_subsample()

The returned mask must be deallocated using cpl_mask_delete().

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if in is NULL
  • CPL_ERROR_ILLEGAL_INPUT if xstep and ystep are not greater than zero
cpl_error_code cpl_mask_filter ( cpl_mask *  self,
const cpl_mask *  other,
const cpl_mask *  kernel,
cpl_filter_mode  filter,
cpl_border_mode  border 
)

Filter a mask using a binary kernel.

Parameters:
selfPre-allocated mask to hold the filtered result
otherMask to filter
kernelElements to use, if set to CPL_BINARY_1
filterCPL_FILTER_EROSION, CPL_FILTER_DILATION, CPL_FILTER_OPENING, CPL_FILTER_CLOSING
borderCPL_BORDER_NOP, CPL_BORDER_ZERO or CPL_BORDER_COPY
Returns:
CPL_ERROR_NONE or the relevant CPL error code

The two masks must have equal dimensions.

The kernel must have an odd number of rows and an odd number of columns.

At least one kernel element must be set to CPL_BINARY_1.

For erosion and dilation: In-place filtering is not supported, but the input buffer may overlap all but the 1+h first rows of the output buffer, where 1+2*h is the number of rows in the kernel.

For opening and closing: Opening is implemented as an erosion followed by a dilation, and closing is implemented as a dilation followed by an erosion. As such a temporary, internal buffer the size of self is used. Consequently, in-place opening and closing is supported with no additional overhead, it is achieved by passing the same mask as both self and other.

Supported modes: CPL_FILTER_EROSION, CPL_FILTER_DILATION: CPL_BORDER_NOP, CPL_BORDER_ZERO or CPL_BORDER_COPY.

CPL_FILTER_OPENING, CPL_FILTER_CLOSING: CPL_BORDER_ZERO or CPL_BORDER_COPY.

Duality and idempotency: Erosion and Dilation have the duality relations: not(dil(A,B)) = er(not(A), B) and not(er(A,B)) = dil(not(A), B).

Opening and closing have similar duality relations: not(open(A,B)) = close(not(A), B) and not(close(A,B)) = open(not(A), B).

Opening and closing are both idempotent, i.e. open(A,B) = open(open(A,B),B) and close(A,B) = close(close(A,B),B).

The above duality and idempotency relations do _not_ hold on the mask border (with the currently supported border modes).

Unnecessary large kernels: Adding an empty border to a given kernel should not change the outcome of the filtering. However doing so widens the border of the mask to be filtered and therefore has an effect on the filtering of the mask border. Since an unnecessary large kernel is also more costly to apply, such kernels should be avoided.

A 1 x 3 erosion filtering example (error checking omitted for brevity)
     cpl_mask * kernel = cpl_mask_new(1, 3); 
     cpl_mask_not(kernel);
     cpl_mask_filter(filtered, raw, kernel, CPL_FILTER_EROSION,
                                            CPL_BORDER_NOP);
     cpl_mask_delete(kernel);

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if an input pointer is NULL.
  • CPL_ERROR_ILLEGAL_INPUT if the kernel has a side of even length.
  • CPL_ERROR_DATA_NOT_FOUND If the kernel is empty.
  • CPL_ERROR_ACCESS_OUT_OF_RANGE If the kernel has a side longer than the input mask.
  • CPL_ERROR_INCOMPATIBLE_INPUT If the input and output masks have incompatible sizes.
  • CPL_ERROR_UNSUPPORTED_MODE If the output pixel buffer overlaps the input one (or the kernel), or the border/filter mode is unsupported.
cpl_error_code cpl_mask_flip ( cpl_mask *  in,
int  angle 
)

Flip a mask on a given miror line.

Parameters:
inmask to flip
anglemirror line in polar coord. is theta = (PI/4) * angle
Returns:
the _cpl_error_code_ or CPL_ERROR_NONE

angle can take one of the following values:

  • 0 (theta=0) to flip the image around the horizontal
  • 1 (theta=pi/4) to flip the image around y=x
  • 2 (theta=pi/2) to flip the image around the vertical
  • 3 (theta=3pi/4) to flip the image around y=-x

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if in is NULL
  • CPL_ERROR_ILLEGAL_INPUT if angle is not as specified
cpl_binary cpl_mask_get ( const cpl_mask *  in,
int  xpos,
int  ypos 
)

Get the value of a mask at a given position.

Parameters:
inthe input mask
xposx position (FITS convention)
yposy position (FITS convention)
Returns:
The mask value or undefined if an error code is set

The mask value can be either CPL_BINARY_0 or CPL_BINARY_1

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if (one of) the input pointer(s) is NULL
  • CPL_ERROR_ILLEGAL_INPUT if xpos or ypos is out of bounds
cpl_binary* cpl_mask_get_data ( cpl_mask *  in)

Get a pointer to the data part of the mask.

Parameters:
inthe input mask
Returns:
Pointer to the data or NULL in error case

The returned pointer refers to already allocated data.

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if (one of) the input pointer(s) is NULL
const cpl_binary* cpl_mask_get_data_const ( const cpl_mask *  in)

Get a pointer to the data part of the mask.

Parameters:
inthe input mask
Returns:
Pointer to the data or NULL in error case
See also:
cpl_mask_get_data
int cpl_mask_get_size_x ( const cpl_mask *  in)

Get the x size of the mask.

Parameters:
inthe input mask
Returns:
The mask x size, or -1 on NULL input

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if (one of) the input pointer(s) is NULL
int cpl_mask_get_size_y ( const cpl_mask *  in)

Get the y size of the mask.

Parameters:
inthe input mask
Returns:
The mask y size, or -1 on NULL input

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if (one of) the input pointer(s) is NULL
cpl_boolean cpl_mask_is_empty ( const cpl_mask *  self)

Return CPL_TRUE iff a mask has no elements set (to CPL_BINARY_1)

Parameters:
selfThe mask to search
Returns:
CPL_TRUE iff the mask has no elements set (to CPL_BINARY_1)
See also:
cpl_mask_is_empty_window()

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if an input pointer is NULL
cpl_boolean cpl_mask_is_empty_window ( const cpl_mask *  self,
int  llx,
int  lly,
int  urx,
int  ury 
)

Return CPL_TRUE iff a mask has no elements set in the window.

Parameters:
selfThe mask to search
llxLower left x position (FITS convention, 1 for leftmost)
llyLower left y position (FITS convention, 1 for lowest)
urxUpper right x position (FITS convention)
uryUpper right y position (FITS convention)
Returns:
CPL_TRUE iff the mask has no elements set (to CPL_BINARY_1)

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if an input pointer is NULL
  • CPL_ERROR_ILLEGAL_INPUT if the window coordinates are not valid
cpl_error_code cpl_mask_move ( cpl_mask *  in,
int  nb_cut,
const int *  new_pos 
)

Reorganize the pixels in a mask.

Parameters:
inmask to collapse
nb_cutthe number of cut in x and y
new_posarray with the nb_cut^2 new positions
Returns:
the _cpl_error_code_ or CPL_ERROR_NONE
See also:
cpl_image_move()

nb_cut must be positive and divide the size of the input mask in x and y.

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if in or new_pos is NULL
  • CPL_ERROR_ILLEGAL_INPUT if nb_cut is not as requested.
cpl_error_code cpl_mask_not ( cpl_mask *  in)

Performs a logical NOT on a mask.

Parameters:
inmask to be modified
Returns:
CPL_ERROR_NONE on success, otherwise the relevant _cpl_error_code_

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if an input pointer is NULL
cpl_error_code cpl_mask_opening ( cpl_mask *  in,
const cpl_matrix *  ker 
)

Compute a morphological opening.

Parameters:
ininput mask to filter
kerbinary kernel (0 for 0, any other value is considered as 1)
Returns:
CPL_ERROR_NONE on success or the _cpl_error_code_ on failure
See also:
cpl_mask_filter()
Deprecated:
Replace this call with cpl_mask_filter() using CPL_FILTER_OPENING and CPL_BORDER_ZERO.
cpl_error_code cpl_mask_or ( cpl_mask *  in1,
const cpl_mask *  in2 
)

Performs a logical OR of one mask onto another.

Parameters:
in1first mask, to be modified
in2second mask
Returns:
CPL_ERROR_NONE on success, otherwise the relevant _cpl_error_code_

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if an input pointer is NULL
  • CPL_ERROR_ILLEGAL_INPUT if the two masks have different sizes
cpl_error_code cpl_mask_set ( cpl_mask *  self,
int  xpos,
int  ypos,
cpl_binary  value 
)

Set a value in a mask at a given position.

Parameters:
selfthe input mask
xposx position (FITS convention)
yposy position (FITS convention)
valuethe value to set in the mask
Returns:
the _cpl_error_code_ or CPL_ERROR_NONE

The value can be either CPL_BINARY_0 or CPL_BINARY_1

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if an input pointer is NULL
  • CPL_ERROR_ILLEGAL_INPUT if xpos or ypos is out of bounds or if value is different from CPL_BINARY_0 and CPL_BINARY_1
cpl_error_code cpl_mask_shift ( cpl_mask *  self,
int  dx,
int  dy 
)

Shift a mask.

Parameters:
selfMask to shift in place
dxShift in X
dyShift in Y
Returns:
the _cpl_error_code_ or CPL_ERROR_NONE
See also:
cpl_image_turn()

The 'empty zone' in the shifted mask is set to CPL_BINARY_1. The shift values have to be valid: -nx < dx < nx and -ny < dy < ny

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if in is NULL
  • CPL_ERROR_ILLEGAL_INPUT if the offsets are too big
cpl_mask* cpl_mask_threshold_image_create ( const cpl_image *  in,
double  lo_cut,
double  hi_cut 
)

Select parts of an image with provided thresholds.

Parameters:
inImage to threshold.
lo_cutLower bound for threshold.
hi_cutHigher bound for threshold.
Returns:
1 newly allocated mask or NULL in error case

Create a mask from an image. Selected areas are the ones strictly inside the provided interval. The input image type can be CPL_TYPE_DOUBLE, CPL_TYPE_FLOAT or CPL_TYPE_INT. The returned mask must be deallocated with cpl_mask_delete()

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if an input pointer is NULL
  • CPL_ERROR_UNSUPPORTED_MODE if the pixel type is unsupported
cpl_error_code cpl_mask_turn ( cpl_mask *  self,
int  rot 
)

Rotate a mask by a multiple of 90 degrees clockwise.

Parameters:
selfMask to rotate in place
rotThe multiple: -1 is a rotation of 90 deg counterclockwise.
Returns:
CPL_ERROR_NONE on success, otherwise the relevant _cpl_error_code_
See also:
cpl_image_turn()

rot may be any integer value, its modulo 4 determines the rotation:

  • -3 to turn 270 degrees counterclockwise.
  • -2 to turn 180 degrees counterclockwise.
  • -1 to turn 90 degrees counterclockwise.
  • 0 to not turn
  • +1 to turn 90 degrees clockwise (same as -3)
  • +2 to turn 180 degrees clockwise (same as -2).
  • +3 to turn 270 degrees clockwise (same as -1).

The definition of the rotation relies on the FITS convention: The lower left corner of the image is at (1,1), x increasing from left to right, y increasing from bottom to top.

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if self is NULL
void* cpl_mask_unwrap ( cpl_mask *  m)

Delete a cpl_mask except the data array.

Parameters:
mcpl_mask to delete
Returns:
A pointer to the data array or NULL if the input is NULL.
Note:
The data array must be deallocated, otherwise a memory leak occurs.
cpl_mask* cpl_mask_wrap ( int  nx,
int  ny,
cpl_binary *  data 
)

Create a cpl_mask from existing data.

Parameters:
nxnumber of element in x direction
nynumber of element in y direction
dataPointer to array of nx*ny cpl_binary
Returns:
1 newly allocated cpl_mask or NULL in case of an error
Note:
The returned object must be deallocated using cpl_mask_unwrap().

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if an input pointer is NULL
  • CPL_ERROR_ILLEGAL_INPUT if nx or ny is negative or zero
cpl_error_code cpl_mask_xor ( cpl_mask *  in1,
const cpl_mask *  in2 
)

Performs a logical XOR of one mask onto another.

Parameters:
in1first mask, to be modified
in2second mask
Returns:
CPL_ERROR_NONE on success, otherwise the relevant _cpl_error_code_

Possible _cpl_error_code_ set in this function:

  • CPL_ERROR_NULL_INPUT if an input pointer is NULL
  • CPL_ERROR_ILLEGAL_INPUT if the two masks have different sizes