| .TH WRAPPERS 3 "11 April 1990" |
| .SH NAME |
| im_wrapone, im_wrapmany \- easy interface to partial image IO system |
| .SH SYNOPSIS |
| .B #include <vips/vips.h> |
| |
| int im_wrapone( IMAGE *in, IMAGE *out, |
| im_wrapone_fn fn, void *a, void *b ) |
| .br |
| int im_wrapmany( IMAGE **in, IMAGE *out, |
| im_wrapmany_fn fn, void *a, void *b ) |
| |
| where |
| |
| typedef void (*im_wrapone_fn)( void *in, void *out, int n, |
| void *a, void *b ) |
| .br |
| typedef void (*im_wrapmany_fn)( void **in, void *out, int n, |
| void *a, void *b ) |
| |
| .SH DESCRIPTION |
| These functions provide a simple way to use the VIPS partial image IO system, |
| provided that your image processing function involves no coordinate |
| transformations, that is, that each output PEL depends only upon the |
| corresponding PEL(s) in the input image(s). |
| |
| You should write your operation as a buffer processing function --- for |
| example: |
| |
| static void |
| invert_buffer( unsigned char *in, unsigned char *out, |
| int width ) |
| { |
| int x; |
| |
| for( x = 0; x < width; x++ ) |
| *out++ = 255 - *in++; |
| } |
| |
| This can now be turned into a full PIO image processing function by: |
| |
| int |
| invert( IMAGE *in, IMAGE *out ) |
| { |
| if( in->BandFmt != FMTUCHAR || |
| in->Coding != NOCODING || |
| in->Bands != 1 ) { |
| im_errormsg( "invert: bad input" ); |
| return( -1 ); |
| } |
| if( im_cp_desc( out, in ) ) |
| return( -1 ); |
| if( im_wrapone( in, out, |
| (im_wrapone_fn) invert_buffer, NULL, NULL ) ) |
| return( 0 ); |
| } |
| |
| im_wrapmany(3) works as im_wrapone(3), but allows many input images. All the |
| inputs should be same Xsize and Ysize, but may vary in type. The array of |
| input images should be NULL-terminated, as for im_start_many(3). |
| |
| .SH RETURN VALUE |
| All int-valued functions return zero on success and non-zero on error. |
| .SH COPYRIGHT |
| National Gallery, 1995 |
| .SH AUTHOR |
| J. Cupitt \- 9/2/95 |