57 lines
1.2 KiB
TeX
57 lines
1.2 KiB
TeX
|
\section{Programming in-place functions}
|
||
|
|
||
|
VIPS includes a little support for in-place functions --- functions
|
||
|
which operate directly on an image, both reading and writing from the same
|
||
|
descriptor via the data pointer. This is an extremely dangerous way to
|
||
|
handle IO, since any bugs in your program will trash your input image.
|
||
|
|
||
|
Operations of this type should call \verb+im_rwcheck()+ instead of
|
||
|
\verb+im_incheck()+. \verb+im_rwcheck()+ tries to get a descriptor ready
|
||
|
for in-place writing. For example, a function which cleared an image to
|
||
|
black might be written as:
|
||
|
|
||
|
\begin{verbatim}
|
||
|
#include <stdio.h>
|
||
|
#include <memory.h>
|
||
|
|
||
|
#include <vips/vips.h>
|
||
|
|
||
|
int
|
||
|
black_inplace( IMAGE *im )
|
||
|
{
|
||
|
/* Check that we can RW to im.
|
||
|
*/
|
||
|
if( im_rwcheck( im ) )
|
||
|
return( -1 );
|
||
|
|
||
|
/* Zap the image!
|
||
|
*/
|
||
|
memset( im->data, 0,
|
||
|
IM_IMAGE_SIZEOF_LINE( im ) *
|
||
|
im->Ysize );
|
||
|
|
||
|
return( 0 );
|
||
|
}
|
||
|
\end{verbatim}
|
||
|
|
||
|
This function might be called from an application as:
|
||
|
|
||
|
\begin{verbatim}
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
#include <vips/vips.h>
|
||
|
|
||
|
void
|
||
|
zap( char *name )
|
||
|
{
|
||
|
IMAGE *im;
|
||
|
|
||
|
if( !(im = im_open( name, "rw" )) ||
|
||
|
black_inplace( im ) ||
|
||
|
im_updatehist( im, "zap image" ) ||
|
||
|
im_close( im ) )
|
||
|
error_exit( "failure!" );
|
||
|
}
|
||
|
\end{verbatim}
|