draw

draw — drawing operations: flood, paste, line, circle

Stability Level

Stable, unless otherwise indicated

Functions

Types and Values

Object Hierarchy


Includes

#include <vips/vips.h>

Description

These operations directly modify the image. They do not thread, on 32-bit machines they will be limited to 2GB images, and a little care needs to be taken if you use them as part of an image pipeline.

They are mostly supposed to be useful for paintbox-style programs.

Functions

vips_draw_rect ()

int
vips_draw_rect (VipsImage *image,
                double *ink,
                int n,
                int left,
                int top,
                int width,
                int height,
                ...);

Optional arguments:

fill : fill the rect

Paint pixels within left , top , width , height in image with ink . If fill is zero, just paint a 1-pixel-wide outline.

See also: vips_draw_circle().

Parameters

image

image to draw on

 

ink

value to draw.

[array length=n]

n

length of ink array

 

left

area to paint

 

top

area to paint

 

width

area to paint

 

height

area to paint

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_rect1 ()

int
vips_draw_rect1 (VipsImage *image,
                 double ink,
                 int left,
                 int top,
                 int width,
                 int height,
                 ...);

Optional arguments:

fill : fill the rect

As vips_draw_rect(), but just take a single double for ink .

See also: vips_draw_rect().

Parameters

image

image to draw on

 

ink

value to draw

 

left

area to paint

 

top

area to paint

 

width

area to paint

 

height

area to paint

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_point ()

int
vips_draw_point (VipsImage *image,
                 double *ink,
                 int n,
                 int x,
                 int y,
                 ...);

As vips_draw_rect(), but draw a single pixel at x , y .

See also: vips_draw_rect().

Parameters

image

image to draw on

 

ink

value to draw.

[array length=n]

n

length of ink array

 

x

point to paint

 

y

point to paint

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_point1 ()

int
vips_draw_point1 (VipsImage *image,
                  double ink,
                  int x,
                  int y,
                  ...);

As vips_draw_point(), but just take a single double for ink .

See also: vips_draw_point().

Parameters

image

image to draw on

 

ink

value to draw

 

x

point to draw

 

y

point to draw

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_image ()

int
vips_draw_image (VipsImage *image,
                 VipsImage *sub,
                 int x,
                 int y,
                 ...);

Optional arguments:

mode : how to combine pixels

Draw sub on top of image at position x , y . The two images must have the same Coding. If sub has 1 band, the bands will be duplicated to match the number of bands in image . sub will be converted to image 's format, see vips_cast().

Use mode to set how pixels are combined. If you use VIPS_COMBINE_MODE_ADD, both images muct be uncoded.

See also: vips_draw_mask(), vips_insert().

Parameters

image

image to draw on

 

sub

image to paint

 

x

draw sub here

 

y

draw sub here

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_mask ()

int
vips_draw_mask (VipsImage *image,
                double *ink,
                int n,
                VipsImage *mask,
                int x,
                int y,
                ...);

Draw mask on the image. mask is a monochrome 8-bit image with 0/255 for transparent or ink coloured points. Intermediate values blend the ink with the pixel. Use with vips_text() to draw text on an image. Use in a vips_draw_line() subclass to draw an object along a line.

ink is an array of double containing values to draw.

See also: vips_text(), vips_draw_line().

Parameters

image

image to draw on

 

ink

value to draw.

[array length=n]

n

size of ink array

 

mask

mask of 0/255 values showing where to plot

 

x

draw mask here

 

y

draw mask here

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_mask1 ()

int
vips_draw_mask1 (VipsImage *image,
                 double ink,
                 VipsImage *mask,
                 int x,
                 int y,
                 ...);

As vips_draw_mask(), but just takes a single double for ink .

See also: vips_draw_mask().

Parameters

image

image to draw on

 

ink

value to draw

 

mask

mask of 0/255 values showing where to plot

 

x

draw mask here

 

y

draw mask here

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_line ()

int
vips_draw_line (VipsImage *image,
                double *ink,
                int n,
                int x1,
                int y1,
                int x2,
                int y2,
                ...);

Draws a 1-pixel-wide line on an image. Subclass and override ::plot to draw lines made of other objects. See vips_draw_line_mask(), for example.

ink is an array of double containing values to draw.

See also: vips_draw_line1(), vips_draw_circle(), vips_draw_mask().

Parameters

image

image to draw on

 

ink

value to draw.

[array length=n]

n

length of ink array

 

x1

start of draw_line

 

y1

start of draw_line

 

x2

end of draw_line

 

y2

end of draw_line

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_line1 ()

int
vips_draw_line1 (VipsImage *image,
                 double ink,
                 int x1,
                 int y1,
                 int x2,
                 int y2,
                 ...);

As vips_draw_line(), but just take a single double for ink .

See also: vips_draw_line().

Parameters

image

image to draw on

 

ink

value to draw

 

x1

start of draw_line

 

y1

start of draw_line

 

x2

end of draw_line

 

y2

end of draw_line

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_line_mask ()

int
vips_draw_line_mask (VipsImage *image,
                     double *ink,
                     int n,
                     int x1,
                     int y1,
                     int x2,
                     int y2,
                     VipsImage *mask,
                     ...);

vips_draw_line_mask1 ()

int
vips_draw_line_mask1 (VipsImage *image,
                      double ink,
                      int x1,
                      int y1,
                      int x2,
                      int y2,
                      VipsImage *mask,
                      ...);

vips_draw_circle ()

int
vips_draw_circle (VipsImage *image,
                  double *ink,
                  int n,
                  int cx,
                  int cy,
                  int radius,
                  ...);

Optional arguments:

fill : fill the draw_circle

Draws a circle on image . If fill is TRUE then the circle is filled, otherwise a 1-pixel-wide perimeter is drawn.

ink is an array of double containing values to draw.

See also: vips_draw_circle1(), vips_draw_line().

Parameters

image

image to draw on

 

ink

value to draw.

[array length=n]

n

length of ink array

 

cx

centre of draw_circle

 

cy

centre of draw_circle

 

radius

draw_circle radius

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_circle1 ()

int
vips_draw_circle1 (VipsImage *image,
                   double ink,
                   int cx,
                   int cy,
                   int radius,
                   ...);

Optional arguments:

fill : fill the draw_circle

As vips_draw_circle(), but just takes a single double for ink .

See also: vips_draw_circle().

Parameters

image

image to draw on

 

ink

value to draw

 

cx

centre of draw_circle

 

cy

centre of draw_circle

 

radius

draw_circle radius

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_flood ()

int
vips_draw_flood (VipsImage *image,
                 double *ink,
                 int n,
                 int x,
                 int y,
                 ...);

Optional arguments:

test : test this image equal : fill while equal to edge left : output left edge of bounding box of modified area top : output top edge of bounding box of modified area width : output width of bounding box of modified area height : output height of bounding box of modified area

Flood-fill image with ink , starting at position x , y . The filled area is bounded by pixels that are equal to the ink colour, in other words, it searches for pixels enclosed by an edge of ink .

If equal is set, it instead searches for pixels which are equal to the start point and fills them with ink .

Normally it will test and set pixels in image . If test is set, it will test pixels in test and set pixels in image . This lets you search an image (test ) for continuous areas of pixels without modifying it.

left , top , width , height output the bounding box of the modified pixels.

ink is an array of double containing values to draw.

See also: vips_draw_flood1().

Parameters

image

image to draw on

 

ink

value to draw.

[array length=n]

n

length of ink array

 

x

centre of circle

 

y

centre of circle

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_flood1 ()

int
vips_draw_flood1 (VipsImage *image,
                  double ink,
                  int x,
                  int y,
                  ...);

Optional arguments:

test : test this image equal : fill while equal to edge left : output left edge of bounding box of modified area top : output top edge of bounding box of modified area width : output width of bounding box of modified area height : output height of bounding box of modified area

As vips_draw_flood(), but just takes a single double for ink .

See also: vips_draw_flood().

Parameters

image

image to draw on

 

ink

value to draw

 

x

centre of circle

 

y

centre of circle

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.


vips_draw_smudge ()

int
vips_draw_smudge (VipsImage *image,
                  int left,
                  int top,
                  int width,
                  int height,
                  ...);

Smudge a section of image . Each pixel in the area left , top , width , height is replaced by the average of the surrounding 3x3 pixels.

See also: vips_draw_line().

Parameters

image

image to draw on

 

left

point to paint

 

top

point to paint

 

width

area to paint

 

height

area to paint

 

...

NULL-terminated list of optional named arguments

 

Returns

0 on success, or -1 on error.

Types and Values

enum VipsCombineMode

See vips_draw_image() and so on.

Operations like vips_draw_image() need to be told how to combine images from two sources.

See also: vips_join().

Members

VIPS_COMBINE_MODE_SET

set pixels to the new value

 

VIPS_COMBINE_MODE_ADD

add pixels

 

VIPS_COMBINE_MODE_LAST