The C++ binding uses this lower layer to define a function called VImage::
which can call any libvips operator with a not-varargs set of variable arguments.
call()
A small Python program walks the set of all libvips operators and generates a set of static bindings. For example:
VImage VImage::invert( VOption *options ) { VImage out; call( "invert", (options ? options : VImage::option()) -> set( "in", *this ) -> set( "out", &out ) ); return( out ); }
So from C++ you can call any libvips operator (though without type-safety) with VImage::
, or use the member functions on call()
VImage
to get type-safe calls for at least the required operator arguments.
The VImage
class also adds automatic reference counting, constant expansion, operator overloads, and various other useful features.