## rect rect — the VIPS rectangle class |

## Stability Level

Stable, unless otherwise indicated

## Functions

#define | VIPS_RECT_RIGHT()
#define | VIPS_RECT_BOTTOM()
#define | VIPS_RECT_HCENTRE()
#define | VIPS_RECT_VCENTRE()
gboolean | vips_rect_isempty ()
gboolean | vips_rect_includespoint ()
gboolean | vips_rect_includesrect ()
gboolean | vips_rect_equalsrect ()
void | vips_rect_marginadjust ()
void | vips_rect_intersectrect ()
void | vips_rect_unionrect ()
VipsRect * | vips_rect_dup ()
void | vips_rect_normalise ()

## Types and Values

| VipsRect

## Includes

    #include <vips/vips.h>

## Description

The VipsRect class and associated types and macros.

## Functions

### 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.

[method]

#### Parameters

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` )?

#### Parameters

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` ?

[method]

#### Parameters

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` ?

[method]

#### Parameters

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.

[method]

#### Parameters

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` .

#### Parameters

r1 | input rectangle 1 |
r2 | input rectangle 2 |
out | output rectangle. | [out]

### 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` .

#### Parameters

r1 | input rectangle 1 |
r2 | input rectangle 2 |
out | output rectangle. | [out]

### 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()`.

[skip]

#### Parameters

r | rectangle to duplicate |

#### Returns

a pointer to copy of `r` allocated on the heap.

[transfer full]

### vips_rect_normalise ()

    void
    vips_rect_normalise (VipsRect *r);

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

[method]

#### Parameters

r | rect to normalise |

## Types and Values

### 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.

#### Members

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

## See Also

region