docs for REGION
This commit is contained in:
parent
a7d6110e0a
commit
5f02498408
@ -50,11 +50,8 @@
|
||||
- better im_check() functions
|
||||
- added im_flood_other() as start of simple segmentation operator
|
||||
- added im_segment()
|
||||
- gtk-doc comments for meta
|
||||
- gtk-doc comments for header
|
||||
- im_printlines(), im_debugim() deprecated (use im_vips2csv() instead)
|
||||
- callback gtkdocs
|
||||
- error gtkdocs
|
||||
- meta, header, callback, error, REGION gtkdocs
|
||||
- removed printlines tool, vips2csv is much better
|
||||
- removed other useless tools as well: debugim, binfile
|
||||
|
||||
|
6
TODO
6
TODO
@ -1,12 +1,10 @@
|
||||
- image.h/im_invalidate() needs docs
|
||||
|
||||
- started region.h
|
||||
- reached im_prepare() in region.h
|
||||
|
||||
|
||||
|
||||
- more stuff from util.c? too much to do it all now
|
||||
|
||||
- im_prepare(), im_render()?
|
||||
- im_render()?
|
||||
|
||||
- memory.c
|
||||
|
||||
|
@ -272,57 +272,14 @@ const char *im_guess_libdir( const char *, const char * );
|
||||
|
||||
VipsImage *im_open( const char *filename, const char *mode );
|
||||
|
||||
/**
|
||||
* im_open_local:
|
||||
* @IM: image to open local to
|
||||
* @NAME: filename to open
|
||||
* @MODE: mode to open with
|
||||
*
|
||||
* Just like im_open(), but the #IMAGE will be closed for you automatically
|
||||
* when @IM is closed.
|
||||
*
|
||||
* Returns: a new #IMAGE, or NULL on error
|
||||
*
|
||||
* See also: im_open(), im_close(), im_local().
|
||||
*/
|
||||
#define im_open_local( IM, NAME, MODE ) \
|
||||
((IMAGE *) im_local( (IM), \
|
||||
(im_construct_fn) im_open, (im_callback_fn) im_close, \
|
||||
(void *) (NAME), (void *) (MODE), NULL ))
|
||||
|
||||
|
||||
/**
|
||||
* im_open_local_array:
|
||||
* @IM: image to open local to
|
||||
* @OUT: array to fill with #IMAGE
|
||||
* @N: array size
|
||||
* @NAME: filename to open
|
||||
* @MODE: mode to open with
|
||||
*
|
||||
* Just like im_open(), but opens an array of images. Handy for creating a set
|
||||
* of temporary images for a function.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* |[
|
||||
* IMAGE *t[5];
|
||||
*
|
||||
* if( im_open_local_array( out, t, 5, "some-temps", "p" ) ||
|
||||
* im_add( a, b, t[0] ) ||
|
||||
* im_invert( t[0], t[1] ) ||
|
||||
* im_add( t[1], t[0], t[2] ) ||
|
||||
* im_costra( t[2], out ) )
|
||||
* return( -1 );
|
||||
* ]|
|
||||
*
|
||||
* Returns: 0 on sucess, or -1 on error
|
||||
*
|
||||
* See also: im_open(), im_open_local(), im_local_array().
|
||||
*/
|
||||
|
||||
/* Strange double cast stops bogus warnings from gcc 4.1
|
||||
*/
|
||||
|
||||
#define im_open_local_array( IM, OUT, N, NAME, MODE ) \
|
||||
(im_local_array( (IM), (void **)((void*)(OUT)), (N),\
|
||||
(im_construct_fn) im_open, (im_callback_fn) im_close, \
|
||||
|
@ -129,6 +129,48 @@ im_buffer_t *im_buffer_unref_ref( im_buffer_t *buffer,
|
||||
struct _VipsImage *im, Rect *area );
|
||||
void im_buffer_print( im_buffer_t *buffer );
|
||||
|
||||
/* Sections of region.h that are private to VIPS.
|
||||
*/
|
||||
|
||||
/* Region types.
|
||||
*/
|
||||
typedef enum region_type {
|
||||
IM_REGION_NONE,
|
||||
IM_REGION_BUFFER, /* a pixel buffer */
|
||||
IM_REGION_OTHER_REGION, /* memory on another region */
|
||||
IM_REGION_OTHER_IMAGE, /* memory on another image */
|
||||
IM_REGION_WINDOW /* mmap() buffer on fd on another image */
|
||||
} RegionType;
|
||||
|
||||
/* Private to iofuncs: the size of the `tiles' requested by im_generate()
|
||||
* when acting as a data sink.
|
||||
*/
|
||||
#define IM__TILE_WIDTH (64)
|
||||
#define IM__TILE_HEIGHT (64)
|
||||
|
||||
/* The height of the strips for the other two request styles.
|
||||
*/
|
||||
#define IM__THINSTRIP_HEIGHT (1)
|
||||
#define IM__FATSTRIP_HEIGHT (16)
|
||||
|
||||
/* Functions on regions.
|
||||
*/
|
||||
struct _REGION;
|
||||
void im__region_take_ownership( struct _REGION *reg );
|
||||
void im__region_check_ownership( struct _REGION *reg );
|
||||
void im__region_no_ownership( struct _REGION *reg );
|
||||
|
||||
void im__copy_region( struct _REGION *reg, struct _REGION *dest, Rect *r, int x, int y );
|
||||
void im__find_demand_size( struct _VipsImage *im, int *pw, int *ph );
|
||||
|
||||
int im__call_start( struct _REGION *reg );
|
||||
void im__call_stop( struct _REGION *reg );
|
||||
|
||||
typedef int (*im_region_fill_fn)( struct _REGION *, void * );
|
||||
int im_region_fill( struct _REGION *reg, Rect *r, im_region_fill_fn fn, void *a );
|
||||
void im_region_print( struct _REGION *region );
|
||||
|
||||
void im_region_print( struct _REGION *region );
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /*__cplusplus*/
|
||||
|
@ -36,19 +36,10 @@
|
||||
extern "C" {
|
||||
#endif /*__cplusplus*/
|
||||
|
||||
/* Region types.
|
||||
*/
|
||||
typedef enum region_type {
|
||||
IM_REGION_NONE,
|
||||
IM_REGION_BUFFER, /* a pixel buffer */
|
||||
IM_REGION_OTHER_REGION, /* memory on another region */
|
||||
IM_REGION_OTHER_IMAGE, /* memory on another image */
|
||||
IM_REGION_WINDOW /* mmap() buffer on fd on another image */
|
||||
} RegionType;
|
||||
|
||||
/* Sub-area of image.
|
||||
*/
|
||||
typedef struct region_struct {
|
||||
typedef struct _REGION {
|
||||
/*< public >*/
|
||||
/* Users may read these two fields.
|
||||
*/
|
||||
IMAGE *im; /* Link back to parent image */
|
||||
@ -56,6 +47,7 @@ typedef struct region_struct {
|
||||
|
||||
/* The rest of REGION is private.
|
||||
*/
|
||||
/*< private >*/
|
||||
RegionType type; /* What kind of attachment */
|
||||
char *data; /* Off here to get data */
|
||||
int bpl; /* Bytes-per-line for data */
|
||||
@ -75,34 +67,14 @@ typedef struct region_struct {
|
||||
im_buffer_t *buffer;
|
||||
} REGION;
|
||||
|
||||
/* Private to iofuncs: the size of the `tiles' requested by im_generate()
|
||||
* when acting as a data sink.
|
||||
*/
|
||||
#define IM__TILE_WIDTH (64)
|
||||
#define IM__TILE_HEIGHT (64)
|
||||
|
||||
/* The height of the strips for the other two request styles.
|
||||
*/
|
||||
#define IM__THINSTRIP_HEIGHT (1)
|
||||
#define IM__FATSTRIP_HEIGHT (16)
|
||||
|
||||
/* Functions on regions.
|
||||
*/
|
||||
void im__region_take_ownership( REGION *reg );
|
||||
void im__region_check_ownership( REGION *reg );
|
||||
void im__region_no_ownership( REGION *reg );
|
||||
|
||||
REGION *im_region_create( IMAGE *im );
|
||||
void im_region_free( REGION *reg );
|
||||
|
||||
int im_region_buffer( REGION *reg, Rect *r );
|
||||
int im_region_image( REGION *reg, Rect *r );
|
||||
int im_region_region( REGION *reg, REGION *to, Rect *r, int x, int y );
|
||||
int im_region_equalsregion( REGION *reg1, REGION *reg2 );
|
||||
int im_region_position( REGION *reg1, int x, int y );
|
||||
typedef int (*im_region_fill_fn)( REGION *, void * );
|
||||
int im_region_fill( REGION *reg, Rect *r, im_region_fill_fn fn, void *a );
|
||||
|
||||
void im_region_print( REGION *region );
|
||||
|
||||
/* IMAGE functions which use regions.
|
||||
*/
|
||||
@ -120,7 +92,6 @@ int im_iterate( IMAGE *im,
|
||||
im_start_fn start, im_generate_fn generate, im_stop_fn stop,
|
||||
void *a, void *b
|
||||
);
|
||||
void im__copy_region( REGION *reg, REGION *dest, Rect *r, int x, int y );
|
||||
|
||||
/* Convenience functions for im_generate()/im_iterate().
|
||||
*/
|
||||
@ -134,29 +105,24 @@ int im_demand_hint( IMAGE *im, im_demand_type hint, ... )
|
||||
int im_demand_hint_array( IMAGE *im, im_demand_type hint, IMAGE **in );
|
||||
void im_free_region_array( REGION **regs );
|
||||
REGION **im_allocate_region_array( IMAGE *im, int count );
|
||||
void im__find_demand_size( IMAGE *im, int *pw, int *ph );
|
||||
|
||||
/* Buffer processing.
|
||||
*/
|
||||
typedef void (*im_wrapone_fn)( void *in, void *out, int width,
|
||||
void *a, void *b );
|
||||
typedef void (*im_wraptwo_fn)( void *in1, void *in2, void *out,
|
||||
int width, void *a, void *b );
|
||||
typedef void (*im_wrapmany_fn)( void **in, void *out, int width,
|
||||
void *a, void *b );
|
||||
|
||||
int im_wrapone( IMAGE *in, IMAGE *out,
|
||||
im_wrapone_fn fn, void *a, void *b );
|
||||
|
||||
typedef void (*im_wraptwo_fn)( void *in1, void *in2, void *out,
|
||||
int width, void *a, void *b );
|
||||
int im_wraptwo( IMAGE *in1, IMAGE *in2, IMAGE *out,
|
||||
im_wraptwo_fn fn, void *a, void *b );
|
||||
|
||||
typedef void (*im_wrapmany_fn)( void **in, void *out, int width,
|
||||
void *a, void *b );
|
||||
int im_wrapmany( IMAGE **in, IMAGE *out,
|
||||
im_wrapmany_fn fn, void *a, void *b );
|
||||
|
||||
/* Internal VIPS functions shared by partials.
|
||||
*/
|
||||
int im__call_start( REGION *reg );
|
||||
void im__call_stop( REGION *reg );
|
||||
|
||||
/* Macros on REGIONs.
|
||||
* IM_REGION_LSKIP() add to move down line
|
||||
* IM_REGION_N_ELEMENTS() number of elements across region
|
||||
|
@ -569,7 +569,14 @@ im_invalidate_image( IMAGE *im )
|
||||
return( NULL );
|
||||
}
|
||||
|
||||
/* Invalidate all pixel caches on an IMAGE and any parents.
|
||||
/**
|
||||
* im_invalidate:
|
||||
* @im: #IMAGE to invalidate
|
||||
*
|
||||
* Invalidate all pixel caches on an #IMAGE and any derived images. The
|
||||
* "invalidate" callback is triggered for all invalidated images.
|
||||
*
|
||||
* See also: im_add_invalidate_callback().
|
||||
*/
|
||||
void
|
||||
im_invalidate( IMAGE *im )
|
||||
|
@ -84,7 +84,7 @@
|
||||
* SECTION: image
|
||||
* @short_description: the VIPS image class
|
||||
* @stability: Stable
|
||||
* @see_also: vips
|
||||
* @see_also: <link linkend="libvips-region">region</link>
|
||||
* @include: vips/vips.h
|
||||
*
|
||||
* The VIPS image class and associated types and macros.
|
||||
@ -134,7 +134,7 @@
|
||||
* These values are set by operations as hints to user-interfaces built on top
|
||||
* of VIPS to help them show images to the user in a meaningful way.
|
||||
* Operations do not use these values to decide their action.
|
||||
**/
|
||||
*/
|
||||
|
||||
/**
|
||||
* VipsBandFmt:
|
||||
@ -153,7 +153,7 @@
|
||||
*
|
||||
* Each corresponnds to a native C type for the current machine. For example,
|
||||
* %IM_BANDFMT_USHORT is <type>unsigned short</type>.
|
||||
**/
|
||||
*/
|
||||
|
||||
/**
|
||||
* VipsCoding:
|
||||
@ -208,28 +208,28 @@
|
||||
* @I: a #VipsImage
|
||||
*
|
||||
* Returns: sizeof() a band element.
|
||||
**/
|
||||
*/
|
||||
|
||||
/**
|
||||
* IM_IMAGE_SIZEOF_PEL:
|
||||
* @I: a #VipsImage
|
||||
*
|
||||
* Returns: sizeof() a pixel.
|
||||
**/
|
||||
*/
|
||||
|
||||
/**
|
||||
* IM_IMAGE_SIZEOF_LINE:
|
||||
* @I: a #VipsImage
|
||||
*
|
||||
* Returns: sizeof() a scanline of pixels.
|
||||
**/
|
||||
*/
|
||||
|
||||
/**
|
||||
* IM_IMAGE_N_ELEMENTS:
|
||||
* @I: a #VipsImage
|
||||
*
|
||||
* Returns: the number of band elements in a scanline.
|
||||
**/
|
||||
*/
|
||||
|
||||
/**
|
||||
* IM_IMAGE_ADDR:
|
||||
@ -244,7 +244,50 @@
|
||||
* If DEBUG is defined, you get a version that checks bounds for you.
|
||||
*
|
||||
* Returns: the address of pixel (x,y) in the image.
|
||||
**/
|
||||
*/
|
||||
|
||||
/**
|
||||
* im_open_local_array:
|
||||
* @IM: image to open local to
|
||||
* @OUT: array to fill with #IMAGE
|
||||
* @N: array size
|
||||
* @NAME: filename to open
|
||||
* @MODE: mode to open with
|
||||
*
|
||||
* Just like im_open(), but opens an array of images. Handy for creating a set
|
||||
* of temporary images for a function.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* |[
|
||||
* IMAGE *t[5];
|
||||
*
|
||||
* if( im_open_local_array( out, t, 5, "some-temps", "p" ) ||
|
||||
* im_add( a, b, t[0] ) ||
|
||||
* im_invert( t[0], t[1] ) ||
|
||||
* im_add( t[1], t[0], t[2] ) ||
|
||||
* im_costra( t[2], out ) )
|
||||
* return( -1 );
|
||||
* ]|
|
||||
*
|
||||
* Returns: 0 on sucess, or -1 on error
|
||||
*
|
||||
* See also: im_open(), im_open_local(), im_local_array().
|
||||
*/
|
||||
|
||||
/**
|
||||
* im_open_local:
|
||||
* @IM: image to open local to
|
||||
* @NAME: filename to open
|
||||
* @MODE: mode to open with
|
||||
*
|
||||
* Just like im_open(), but the #IMAGE will be closed for you automatically
|
||||
* when @IM is closed.
|
||||
*
|
||||
* Returns: a new #IMAGE, or NULL on error
|
||||
*
|
||||
* See also: im_open(), im_close(), im_local().
|
||||
*/
|
||||
|
||||
/* Try to make an O_BINARY ... sometimes need the leading '_'.
|
||||
*/
|
||||
|
@ -35,6 +35,8 @@
|
||||
* - gah, im_region_image() could still break (thanks Mikkel)
|
||||
* 23/7/08
|
||||
* - added im_region_print()
|
||||
* 7/10/09
|
||||
* - gtkdoc comments
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -100,6 +102,77 @@
|
||||
#include <dmalloc.h>
|
||||
#endif /*WITH_DMALLOC*/
|
||||
|
||||
/**
|
||||
* SECTION: region
|
||||
* @short_description: small, rectangular parts of images
|
||||
* @stability: Stable
|
||||
* @see_also: <link linkend="libvips-image">image</link>
|
||||
* @include: vips/vips.h
|
||||
*
|
||||
* A #REGION is a small part of an image and some pixels. You use regions to
|
||||
* read pixels out of images without having to have the whole image in memory
|
||||
* at once.
|
||||
*
|
||||
* A region can be a memory buffer, part of a memory-mapped file, part of some
|
||||
* other image, or part of some other region.
|
||||
*/
|
||||
|
||||
/**
|
||||
* REGION:
|
||||
* @im: the #IMAGE that this region is defined on
|
||||
* @valid: the #Rect of pixels that this region represents
|
||||
*
|
||||
* A small part of an #IMAGE. @valid holds the left/top/width/height of the
|
||||
* area of pixels that are available from the region.
|
||||
*
|
||||
* See also: IM_REGION_ADDR(), im_region_create(), im_prepare().
|
||||
*/
|
||||
|
||||
/**
|
||||
* IM_REGION_LSKIP:
|
||||
* @R: a #REGION
|
||||
*
|
||||
* Returns: the number of bytes to add to move down a scanline.
|
||||
*/
|
||||
|
||||
/**
|
||||
* IM_REGION_N_ELEMENTS:
|
||||
* @R: a #REGION
|
||||
*
|
||||
* Returns: the number of band elements across a region.
|
||||
*/
|
||||
|
||||
/**
|
||||
* IM_REGION_SIZEOF_LINE:
|
||||
* @R: a #REGION
|
||||
*
|
||||
* Returns: the number of bytes across a region.
|
||||
*/
|
||||
|
||||
/**
|
||||
* IM_REGION_ADDR:
|
||||
* @R: a #REGION
|
||||
* @X: x coordinate
|
||||
* @Y: y coordinate
|
||||
*
|
||||
* This macro returns a pointer to a pixel in a region. The (x, y) coordinates
|
||||
* need to be within the #Rect (@R->valid).
|
||||
*
|
||||
* If DEBUG is defined, you get a version that checks bounds for you.
|
||||
*
|
||||
* Returns: the address of pixel (x,y) in the region.
|
||||
*/
|
||||
|
||||
/**
|
||||
* IM_REGION_ADDR_TOPLEFT:
|
||||
* @R: a #REGION
|
||||
*
|
||||
* This macro returns a pointer to the top-left pixel in the #REGION, that is,
|
||||
* the pixel at (@R->valid.left, @R->valid.top).
|
||||
*
|
||||
* Returns: the address of the top-left pixel in the region.
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
/* Track all regions here for debugging.
|
||||
*/
|
||||
@ -208,9 +281,14 @@ im__region_no_ownership( REGION *reg )
|
||||
g_mutex_unlock( reg->im->sslock );
|
||||
}
|
||||
|
||||
/* Create a region. Set no attachments. Either im_prepare() or im_generate()
|
||||
* are responsible for getting regions ready for user functions to read
|
||||
* from/write to.
|
||||
/**
|
||||
* im_region_create:
|
||||
* @im: image to create this region on
|
||||
*
|
||||
* Create a region. #REGION s start out empty, you need to call im_prepare() to
|
||||
* fill them with pixels.
|
||||
*
|
||||
* See also: im_prepare(), im_region_free().
|
||||
*/
|
||||
REGION *
|
||||
im_region_create( IMAGE *im )
|
||||
@ -262,6 +340,15 @@ im_region_reset( REGION *reg )
|
||||
IM_FREEF( im_buffer_unref, reg->buffer );
|
||||
}
|
||||
|
||||
/**
|
||||
* im_region_free:
|
||||
* @reg: #REGION to free
|
||||
*
|
||||
* Free a region and any resources it holds.
|
||||
*
|
||||
* If @im has previously been closed, then freeing the last #REGION on @in can
|
||||
* cause @im to finally be freed as well.
|
||||
*/
|
||||
void
|
||||
im_region_free( REGION *reg )
|
||||
{
|
||||
@ -315,6 +402,17 @@ im_region_free( REGION *reg )
|
||||
* reg->buffer->done to see if there are pixels there already. Otherwise, you
|
||||
* need to calculate.
|
||||
*/
|
||||
|
||||
/**
|
||||
* im_region_buffer:
|
||||
* @reg: region to operate upon
|
||||
* @r: #Rect of pixels you need to be able to address
|
||||
*
|
||||
* The region is transformed so that at least @r pixels are available as a
|
||||
* memory buffer.
|
||||
*
|
||||
* Returns: 0 on success, or -1 for error.
|
||||
*/
|
||||
int
|
||||
im_region_buffer( REGION *reg, Rect *r )
|
||||
{
|
||||
@ -366,9 +464,16 @@ im_region_buffer( REGION *reg, Rect *r )
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
/* Attach a region to a small section of the image on which it is defined.
|
||||
* The IMAGE we are attached to should be im_mmapin(), im_mmapinrw() or
|
||||
* im_setbuf(). The Rect is clipped against the image size.
|
||||
/**
|
||||
* im_region_image:
|
||||
* @reg: region to operate upon
|
||||
* @r: #Rect of pixels you need to be able to address
|
||||
*
|
||||
* The region is transformed so that at least @r pixels are available directly
|
||||
* from the image. The image needs to be a memory buffer or represent a file
|
||||
* on disc that has been mapped or can be mapped.
|
||||
*
|
||||
* Returns: 0 on success, or -1 for error.
|
||||
*/
|
||||
int
|
||||
im_region_image( REGION *reg, Rect *r )
|
||||
@ -445,18 +550,29 @@ im_region_image( REGION *reg, Rect *r )
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
/* Make IM_REGION_ADDR() stuff to reg go to dest instead.
|
||||
/**
|
||||
* im_region_region:
|
||||
* @reg: region to operate upon
|
||||
* @dest: region to connect to
|
||||
* @r: #Rect of pixels you need to be able to address
|
||||
* @x: postion of @r in @dest
|
||||
* @y: postion of @r in @dest
|
||||
*
|
||||
* r is the part of the reg image which you want to be able to write to (this
|
||||
* effectively becomes the valid field), (x,y) is the top LH corner of the
|
||||
* corresponding area in dest.
|
||||
* Make IM_REGION_ADDR() on @reg go to @dest instead.
|
||||
*
|
||||
* Performs all clippings necessary to ensure that ®->valid is indeed
|
||||
* @r is the part of @reg which you want to be able to address (this
|
||||
* effectively becomes the valid field), (@x, @y) is the top LH corner of the
|
||||
* corresponding area in @dest.
|
||||
*
|
||||
* Performs all clipping necessary to ensure that @reg->valid is indeed
|
||||
* valid.
|
||||
*
|
||||
* If the region we attach to is modified, we are left with dangling pointers!
|
||||
* If the region we attach to is on another image, the two images must have
|
||||
* If the region we attach to is modified, we can be left with dangling
|
||||
* pointers! If the region we attach to is on another image, the two images
|
||||
* must have
|
||||
* the same sizeof( pel ).
|
||||
*
|
||||
* Returns: 0 on success, or -1 for error.
|
||||
*/
|
||||
int
|
||||
im_region_region( REGION *reg, REGION *dest, Rect *r, int x, int y )
|
||||
@ -540,10 +656,20 @@ im_region_region( REGION *reg, REGION *dest, Rect *r, int x, int y )
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
/* Do two regions point to the same piece of image? ie.
|
||||
/**
|
||||
* im_region_equalsregion:
|
||||
* @reg1: region to test
|
||||
* @reg2: region to test
|
||||
*
|
||||
* Do two regions point to the same piece of image? ie.
|
||||
*
|
||||
* |[
|
||||
* IM_REGION_ADDR( reg1, x, y ) == IM_REGION_ADDR( reg2, x, y ) &&
|
||||
* *IM_REGION_ADDR( reg1, x, y ) ==
|
||||
* *IM_REGION_ADDR( reg2, x, y ) for all x, y, reg1, reg2.
|
||||
* ]|
|
||||
*
|
||||
* Returns: non-zero on equality.
|
||||
*/
|
||||
int
|
||||
im_region_equalsregion( REGION *reg1, REGION *reg2 )
|
||||
@ -553,10 +679,18 @@ im_region_equalsregion( REGION *reg1, REGION *reg2 )
|
||||
reg1->data == reg2->data );
|
||||
}
|
||||
|
||||
/* Set the position of a region. This only affects reg->valid, ie. the way
|
||||
/**
|
||||
* im_region_position:
|
||||
* @reg: region to operate upon
|
||||
* @x: position to move to
|
||||
* @y: position to move to
|
||||
*
|
||||
* Set the position of a region. This only affects reg->valid, ie. the way
|
||||
* pixels are addressed, not reg->data, the pixels which are addressed. Clip
|
||||
* against the size of the image. Do not allow negative positions, or
|
||||
* positions outside the image.
|
||||
*
|
||||
* Returns: 0 on success, or -1 for error.
|
||||
*/
|
||||
int
|
||||
im_region_position( REGION *reg, int x, int y )
|
||||
|
Loading…
Reference in New Issue
Block a user