## rect

rect — the VIPS rectangle class

## Stability Level

Stable, unless otherwise indicated

## Synopsis

    #include <vips/vips.h>

                        VipsRect;
    #define             VIPS_RECT_RIGHT                     (R)
    #define             VIPS_RECT_BOTTOM                    (R)
    #define             VIPS_RECT_HCENTRE                   (R)
    #define             VIPS_RECT_VCENTRE                   (R)
    gboolean            vips_rect_isempty                   (const VipsRect *r);
    gboolean            vips_rect_includespoint             (const VipsRect *r,
                                                             int x,
                                                             int y);
    gboolean            vips_rect_includesrect              (const VipsRect *r1,
                                                             const VipsRect *r2);
    gboolean            vips_rect_equalsrect                (const VipsRect *r1,
                                                             const VipsRect *r2);
    void                vips_rect_marginadjust              (VipsRect *r,
                                                             int n);
    void                vips_rect_intersectrect             (const VipsRect *r1,
                                                             const VipsRect *r2,
                                                             VipsRect *out);
    void                vips_rect_unionrect                 (const VipsRect *r1,
                                                             const VipsRect *r2,
                                                             VipsRect *out);
    VipsRect *          vips_rect_dup                       (const VipsRect *r);
    void                vips_rect_normalise                 (VipsRect *r);

## Description

The VipsRect class and associated types and macros.

## Details

### VipsRect

    typedef struct {
    	int left;
    	int top;
    	int width;
    	int height;
    } VipsRect;

A VipsRect is a rectangular area of pixels. This is a struct for performing simple rectangle algebra.

int `left`; | left edge of rectangle
int `top`; | top edge of rectangle
int `width`; | width of rectangle
int `height`; | height of rectangle

### VIPS_RECT_RIGHT()

    #define VIPS_RECT_RIGHT(R) ((R)->left + (R)->width)

### VIPS_RECT_BOTTOM()

    #define VIPS_RECT_BOTTOM(R) ((R)->top + (R)->height)

### VIPS_RECT_HCENTRE()

    #define VIPS_RECT_HCENTRE(R) ((R)->left + (R)->width / 2)

### VIPS_RECT_VCENTRE()

    #define VIPS_RECT_VCENTRE(R) ((R)->top + (R)->height / 2)

### vips_rect_isempty ()

    gboolean            vips_rect_isempty                   (const VipsRect *r);

Is `r` empty? ie. zero width or height.

`r` : | rectangle to test
Returns : | `TRUE` if `r` contains no pixels.

### vips_rect_includespoint ()

    gboolean            vips_rect_includespoint             (const VipsRect *r,
                                                             int x,
                                                             int y);

Does `r` contain point (`x`, `y`)?

`r` : | rectangle to test
`x` : | position to test for
`y` : | position to test for
Returns : | `TRUE` if `r` contains (`x`, `y`).

### vips_rect_includesrect ()

    gboolean            vips_rect_includesrect              (const VipsRect *r1,
                                                             const VipsRect *r2);

Is `r2` a subset of `r1`?

`r1` : | outer rectangle
`r2` : | inner rectangle
Returns : | `TRUE` if `r2` is a subset of `r1`.

### vips_rect_equalsrect ()

    gboolean            vips_rect_equalsrect                (const VipsRect *r1,
                                                             const VipsRect *r2);

Is `r1` equal to `r2`?

`r1` : | first rectangle
`r2` : | second rectangle
Returns : | `TRUE` if `r1` is equal to `r2`.

### vips_rect_marginadjust ()

    void                vips_rect_marginadjust              (VipsRect *r,
                                                             int n);

Enlarge `r` by `n`. +1 means out one pixel.

`r` : | rectangle to adjust
`n` : | enlarge by

### vips_rect_intersectrect ()

    void                vips_rect_intersectrect             (const VipsRect *r1,
                                                             const VipsRect *r2,
                                                             VipsRect *out);

Fill `out` with the intersection of `r1` and `r2`. `out` can equal `r1` or `r2`.

`r1` : | input rectangle 1
`r2` : | input rectangle 2
`out` : | output rectangle

### vips_rect_unionrect ()

    void                vips_rect_unionrect                 (const VipsRect *r1,
                                                             const VipsRect *r2,
                                                             VipsRect *out);

Fill `out` with the bounding box of `r1` and `r2`. `out` can equal `r1` or `r2`.

`r1` : | input rectangle 1
`r2` : | input rectangle 2
`out` : | output rectangle

### vips_rect_dup ()

    VipsRect *          vips_rect_dup                       (const VipsRect *r);

Duplicate a rect to the heap. You need to free the result with `vips_free()`.

`r` : | rectangle to duplicate
Returns : | a pointer to copy of `r` allocated on the heap.

### vips_rect_normalise ()

    void                vips_rect_normalise                 (VipsRect *r);

Make sure width and height are >0 by moving the origin and flipping the rect.

`r` : | rect to normalise

## See Also

region