Use pyvips to generate the C++ binding

This commit is contained in:
kleisauke 2019-02-01 21:45:12 +01:00
parent 097bb815b7
commit de27688eea
4 changed files with 1746 additions and 1805 deletions

View File

@ -1,212 +1,257 @@
#!/usr/bin/python
#!/usr/bin/env python
# walk vips and generate member definitions for all operators
# This file generates the member definitions and declarations for all vips operators.
# It's in Python, since we use the whole of FFI.
# sample member definition:
# Regenerate the files with something like:
#
# cd cplusplus
# python gen-operators.py
# VImage VImage::invert( VOption *options )
# this needs pyvips
#
# pip install --user pyvips
# Sample member declaration:
# VImage invert(VOption *options = 0) const;
# Sample member definition:
# VImage VImage::invert( VOption *options ) const
# {
# VImage out;
#
# call( "invert",
# (options ? options : VImage::option())->
# set( "in", *this )->
# set( "out", &out ) );
#
# return( out );
# VImage out;
#
# call( "invert",
# (options ? options : VImage::option())->
# set( "in", *this )->
# set( "out", &out ) );
#
# return( out );
# }
import sys
import re
import datetime
import logging
#logging.basicConfig(level = logging.DEBUG)
import gi
gi.require_version('Vips', '8.0')
from gi.repository import Vips, GObject
vips_type_image = GObject.GType.from_name("VipsImage")
vips_type_operation = GObject.GType.from_name("VipsOperation")
param_enum = GObject.GType.from_name("GParamEnum")
from pyvips import Image, Operation, GValue, Error, \
ffi, gobject_lib, type_map, type_from_name, nickname_find, type_name
# turn a GType into a C++ type
gtype_to_cpp = {
"VipsImage" : "VImage",
"gint" : "int",
"gdouble" : "double",
"gboolean" : "bool",
"gchararray" : "char *",
"VipsArrayInt" : "std::vector<int>",
"VipsArrayDouble" : "std::vector<double>",
"VipsArrayImage" : "std::vector<VImage>",
"VipsBlob" : "VipsBlob *"
GValue.gbool_type: 'bool',
GValue.gint_type: 'int',
GValue.gdouble_type: 'double',
GValue.gstr_type: 'char *',
GValue.refstr_type: 'char *',
GValue.gflags_type: 'int',
GValue.gobject_type: 'char *',
GValue.image_type: 'VImage',
GValue.array_int_type: 'std::vector<int>',
GValue.array_double_type: 'std::vector<double>',
GValue.array_image_type: 'std::vector<VImage>',
GValue.blob_type: 'VipsBlob *'
}
def get_ctype(prop):
# values for VipsArgumentFlags
_REQUIRED = 1
_INPUT = 16
_OUTPUT = 32
_DEPRECATED = 64
_MODIFY = 128
# for VipsOperationFlags
_OPERATION_DEPRECATED = 8
def get_cpp_type(gtype):
"""Map a gtype to C++ type name we use to represent it.
"""
if gtype in gtype_to_cpp:
return gtype_to_cpp[gtype]
fundamental = gobject_lib.g_type_fundamental(gtype)
# enum params use the C name as their name
if GObject.type_is_a(param_enum, prop):
return prop.value_type.name
if fundamental == GValue.genum_type:
return type_name(gtype)
return gtype_to_cpp[prop.value_type.name]
if fundamental in gtype_to_cpp:
return gtype_to_cpp[fundamental]
def find_required(op):
required = []
for prop in op.props:
flags = op.get_argument_flags(prop.name)
if not flags & Vips.ArgumentFlags.REQUIRED:
continue
if flags & Vips.ArgumentFlags.DEPRECATED:
continue
return '<unknown type>'
required.append(prop)
def priority_sort(a, b):
pa = op.get_argument_priority(a.name)
pb = op.get_argument_priority(b.name)
# swap any '-' for '_'
def cppize(name):
return name.replace('-', '_')
return pa - pb
required.sort(priority_sort)
def generate_operation(operation_name, declaration_only=False):
op = Operation.new_from_name(operation_name)
return required
# we are only interested in non-deprecated args
args = [[name, flags] for name, flags in op.get_args()
if not flags & _DEPRECATED]
# find the first input image ... this will be used as "this"
def find_first_input_image(op, required):
found = False
for prop in required:
flags = op.get_argument_flags(prop.name)
if not flags & Vips.ArgumentFlags.INPUT:
continue
if GObject.type_is_a(vips_type_image, prop.value_type):
found = True
# find the first required input image arg, if any ... that will be self
member_x = None
for name, flags in args:
if ((flags & _INPUT) != 0 and
(flags & _REQUIRED) != 0 and
op.get_typeof(name) == GValue.image_type):
member_x = name
break
if not found:
return None
required_input = [name for name, flags in args
if (flags & _INPUT) != 0 and
(flags & _REQUIRED) != 0 and
name != member_x]
return prop
required_output = [name for name, flags in args
if ((flags & _OUTPUT) != 0 and
(flags & _REQUIRED) != 0) or
((flags & _INPUT) != 0 and
(flags & _REQUIRED) != 0 and
(flags & _MODIFY) != 0) and
name != member_x]
# find the first output arg ... this will be used as the result
def find_first_output(op, required):
found = False
for prop in required:
flags = op.get_argument_flags(prop.name)
if not flags & Vips.ArgumentFlags.OUTPUT:
continue
found = True
break
has_output = len(required_output) >= 1
if not found:
return None
# TODO: Should we output the operation description as comment?
# if declaration_only:
# description = op.get_description()
#
# result = '\n\n/*\n'
# result += ' ' + description[0].upper() + description[1:] + '.\n'
# result += '*/\n'
# else:
return prop
# swap any "-" for "_"
def cppize(name):
return re.sub('-', '_', name)
def gen_arg_list(op, required):
first = True
for prop in required:
if not first:
print ',',
else:
first = False
print get_ctype(prop),
# output params are passed by reference
flags = op.get_argument_flags(prop.name)
if flags & Vips.ArgumentFlags.OUTPUT:
print '*',
print cppize(prop.name),
if not first:
print ',',
print 'VOption *options',
def gen_operation(cls):
op = Vips.Operation.new(cls.name)
gtype = Vips.type_find("VipsOperation", cls.name)
nickname = Vips.nickname_find(gtype)
all_required = find_required(op)
result = find_first_output(op, all_required)
this = find_first_input_image(op, all_required)
# shallow copy
required = all_required[:]
if result != None:
required.remove(result)
if this != None:
required.remove(this)
if result == None:
print 'void',
result = '\n'
if member_x is None and declaration_only:
result += 'static '
if has_output:
# the first output arg will be used as the result
cpp_type = get_cpp_type(op.get_typeof(required_output[0]))
spacing = '' if cpp_type.endswith('*') else ' '
result += '{0}{1}'.format(cpp_type, spacing)
else:
print '%s' % gtype_to_cpp[result.value_type.name],
result += 'void '
print 'VImage::%s(' % nickname,
if not declaration_only:
result += 'VImage::'
gen_arg_list(op, required)
result += '{0}( '.format(operation_name)
for name in required_input:
gtype = op.get_typeof(name)
cpp_type = get_cpp_type(gtype)
spacing = '' if cpp_type.endswith('*') else ' '
result += '{0}{1}{2}, '.format(cpp_type, spacing, cppize(name))
print ')',
if this != None:
print 'const',
print
# output params are passed by reference
if has_output:
# skip the first element
for name in required_output[1:]:
gtype = op.get_typeof(name)
cpp_type = get_cpp_type(gtype)
spacing = '' if cpp_type.endswith('*') else ' '
result += '{0}{1}*{2}, '.format(cpp_type, spacing, cppize(name))
print '{'
if result != None:
print ' %s %s;' % (get_ctype(result), cppize(result.name))
print ''
result += 'VOption *options {0})'.format('= 0 ' if declaration_only else '')
print ' call( "%s"' % nickname,
# if no 'this' available, it's a class method and they are all const
if member_x is not None:
result += ' const'
first = True
for prop in all_required:
if first:
print ','
print ' (options ? options : VImage::option())',
first = False
if declaration_only:
result += ';'
print '->'
print ' ',
if prop == this:
print 'set( "%s", *this )' % prop.name,
else:
flags = op.get_argument_flags(prop.name)
arg = cppize(prop.name)
if flags & Vips.ArgumentFlags.OUTPUT and prop == result:
arg = '&' + arg
return result
print 'set( "%s", %s )' % (prop.name, arg),
result += '\n{\n'
print ');'
if has_output:
# the first output arg will be used as the result
name = required_output[0]
cpp_type = get_cpp_type(op.get_typeof(name))
spacing = '' if cpp_type.endswith('*') else ' '
result += ' {0}{1}{2};\n\n'.format(cpp_type, spacing, cppize(name))
if result != None:
print ''
print ' return( %s );' % cppize(result.name)
result += ' call( "{0}",\n'.format(operation_name)
result += ' (options ? options : VImage::option())'
if member_x is not None:
result += '->\n'
result += ' set( "{0}", *this )'.format(member_x)
print '}'
print ''
all_required = required_input
# we have a few synonyms ... don't generate twice
generated = {}
if has_output:
# first element needs to be passed by reference
arg = cppize(required_output[0])
result += '->\n'
result += ' set( "{0}", &{1} )'.format(required_output[0], arg)
def find_class_methods(cls):
if not cls.is_abstract():
gtype = Vips.type_find("VipsOperation", cls.name)
nickname = Vips.nickname_find(gtype)
if not nickname in generated:
gen_operation(cls)
generated[nickname] = True
# append the remaining list
all_required += required_output[1:]
if len(cls.children) > 0:
for child in cls.children:
find_class_methods(child)
for name in all_required:
arg = cppize(name)
result += '->\n'
result += ' set( "{0}", {1} )'.format(name, arg)
if __name__ == '__main__':
find_class_methods(vips_type_operation)
result += ' );\n'
if has_output:
result += '\n'
result += ' return( {0} );\n'.format(required_output[0])
result += '}\n'
return result
preamble = """// {0} for vips operations
// {1}
// this file is generated automatically, do not edit!
"""
now = datetime.datetime.now().strftime('%a %d %b %H:%M:%S %Y')
def generate_operators(filename, declarations_only=False):
all_nicknames = []
def add_nickname(gtype, a, b):
nickname = nickname_find(gtype)
try:
# can fail for abstract types
op = Operation.new_from_name(nickname)
# we are only interested in non-deprecated operations
if (op.get_flags() & _OPERATION_DEPRECATED) == 0:
all_nicknames.append(nickname)
except Error:
pass
type_map(gtype, add_nickname)
return ffi.NULL
type_map(type_from_name('VipsOperation'), add_nickname)
# TODO: Should we add the 'missing' extract_area synonym by hand?
# all_nicknames.append('crop')
# make list unique and sort
all_nicknames = list(set(all_nicknames))
all_nicknames.sort()
print('Generating {0} ...'.format(filename))
with open(filename, 'w') as f:
f.write(preamble.format('headers' if declarations_only else "bodies", now))
for nickname in all_nicknames:
f.write(generate_operation(nickname, declarations_only))
f.write('\n')
generate_operators('vips-operators.cpp')
generate_operators('include/vips/vips-operators.h', True)

View File

@ -1,174 +0,0 @@
#!/usr/bin/python
# walk vips and generate headers for all operators
# sample member declaration :
# VImage invert( VOption *options = 0 )
import sys
import re
import logging
#logging.basicConfig(level = logging.DEBUG)
import gi
gi.require_version('Vips', '8.0')
from gi.repository import Vips, GObject
vips_type_image = GObject.GType.from_name("VipsImage")
vips_type_operation = GObject.GType.from_name("VipsOperation")
param_enum = GObject.GType.from_name("GParamEnum")
# turn a GType into a C++ type
gtype_to_cpp = {
"VipsImage" : "VImage",
"gint" : "int",
"gdouble" : "double",
"gboolean" : "bool",
"gchararray" : "char *",
"VipsArrayInt" : "std::vector<int>",
"VipsArrayDouble" : "std::vector<double>",
"VipsArrayImage" : "std::vector<VImage>",
"VipsBlob" : "VipsBlob *"
}
def get_ctype(prop):
# enum params use the C name as their name
if GObject.type_is_a(param_enum, prop):
return prop.value_type.name
return gtype_to_cpp[prop.value_type.name]
def find_required(op):
required = []
for prop in op.props:
flags = op.get_argument_flags(prop.name)
if not flags & Vips.ArgumentFlags.REQUIRED:
continue
if flags & Vips.ArgumentFlags.DEPRECATED:
continue
required.append(prop)
def priority_sort(a, b):
pa = op.get_argument_priority(a.name)
pb = op.get_argument_priority(b.name)
return pa - pb
required.sort(priority_sort)
return required
# find the first input image ... this will be used as "this"
def find_first_input_image(op, required):
found = False
for prop in required:
flags = op.get_argument_flags(prop.name)
if not flags & Vips.ArgumentFlags.INPUT:
continue
if GObject.type_is_a(vips_type_image, prop.value_type):
found = True
break
if not found:
return None
return prop
# find the first output arg ... this will be used as the result
def find_first_output(op, required):
found = False
for prop in required:
flags = op.get_argument_flags(prop.name)
if not flags & Vips.ArgumentFlags.OUTPUT:
continue
found = True
break
if not found:
return None
return prop
# swap any "-" for "_"
def cppize(name):
return re.sub('-', '_', name)
def gen_arg_list(op, required):
first = True
for prop in required:
if not first:
print ',',
else:
first = False
print get_ctype(prop),
# output params are passed by reference
flags = op.get_argument_flags(prop.name)
if flags & Vips.ArgumentFlags.OUTPUT:
print '*',
print cppize(prop.name),
if not first:
print ',',
print 'VOption *options = 0',
def gen_operation(cls):
op = Vips.Operation.new(cls.name)
gtype = Vips.type_find("VipsOperation", cls.name)
nickname = Vips.nickname_find(gtype)
all_required = find_required(op)
result = find_first_output(op, all_required)
this = find_first_input_image(op, all_required)
# shallow copy
required = all_required[:]
if result != None:
required.remove(result)
if this != None:
required.remove(this)
# no "this" available, it's a class method
if this == None:
print 'static',
if result == None:
print 'void',
else:
print '%s' % gtype_to_cpp[result.value_type.name],
print '%s(' % nickname,
gen_arg_list(op, required)
print ')',
# if no "this" available, it's a class method and they are all const
if this != None:
print ' const',
print ';'
# we have a few synonyms ... don't generate twice
generated = {}
def find_class_methods(cls):
if not cls.is_abstract():
gtype = Vips.type_find("VipsOperation", cls.name)
nickname = Vips.nickname_find(gtype)
if not nickname in generated:
gen_operation(cls)
generated[nickname] = True
if len(cls.children) > 0:
for child in cls.children:
find_class_methods(child)
if __name__ == '__main__':
find_class_methods(vips_type_operation)

View File

@ -1,255 +1,262 @@
// headers for vips operations
// Mon 11 Jun 14:21:32 BST 2018
// Fri 01 Feb 21:18:25 2019
// this file is generated automatically, do not edit!
static void system( char * cmd_format , VOption *options = 0 ) ;
VImage add( VImage right , VOption *options = 0 ) const ;
VImage subtract( VImage right , VOption *options = 0 ) const ;
VImage multiply( VImage right , VOption *options = 0 ) const ;
VImage divide( VImage right , VOption *options = 0 ) const ;
VImage relational( VImage right , VipsOperationRelational relational , VOption *options = 0 ) const ;
VImage remainder( VImage right , VOption *options = 0 ) const ;
VImage boolean( VImage right , VipsOperationBoolean boolean , VOption *options = 0 ) const ;
VImage math2( VImage right , VipsOperationMath2 math2 , VOption *options = 0 ) const ;
VImage complex2( VImage right , VipsOperationComplex2 cmplx , VOption *options = 0 ) const ;
VImage complexform( VImage right , VOption *options = 0 ) const ;
static VImage sum( std::vector<VImage> in , VOption *options = 0 ) ;
VImage invert( VOption *options = 0 ) const ;
VImage linear( std::vector<double> a , std::vector<double> b , VOption *options = 0 ) const ;
VImage math( VipsOperationMath math , VOption *options = 0 ) const ;
VImage abs( VOption *options = 0 ) const ;
VImage sign( VOption *options = 0 ) const ;
VImage round( VipsOperationRound round , VOption *options = 0 ) const ;
VImage relational_const( VipsOperationRelational relational , std::vector<double> c , VOption *options = 0 ) const ;
VImage remainder_const( std::vector<double> c , VOption *options = 0 ) const ;
VImage boolean_const( VipsOperationBoolean boolean , std::vector<double> c , VOption *options = 0 ) const ;
VImage math2_const( VipsOperationMath2 math2 , std::vector<double> c , VOption *options = 0 ) const ;
VImage complex( VipsOperationComplex cmplx , VOption *options = 0 ) const ;
VImage complexget( VipsOperationComplexget get , VOption *options = 0 ) const ;
double avg( VOption *options = 0 ) const ;
double min( VOption *options = 0 ) const ;
double max( VOption *options = 0 ) const ;
double deviate( VOption *options = 0 ) const ;
VImage stats( VOption *options = 0 ) const ;
VImage hist_find( VOption *options = 0 ) const ;
VImage hist_find_ndim( VOption *options = 0 ) const ;
VImage hist_find_indexed( VImage index , VOption *options = 0 ) const ;
VImage hough_line( VOption *options = 0 ) const ;
VImage hough_circle( VOption *options = 0 ) const ;
VImage project( VImage * rows , VOption *options = 0 ) const ;
VImage profile( VImage * rows , VOption *options = 0 ) const ;
VImage measure( int h , int v , VOption *options = 0 ) const ;
std::vector<double> getpoint( int x , int y , VOption *options = 0 ) const ;
int find_trim( int * top , int * width , int * height , VOption *options = 0 ) const ;
VImage copy( VOption *options = 0 ) const ;
VImage tilecache( VOption *options = 0 ) const ;
VImage linecache( VOption *options = 0 ) const ;
VImage sequential( VOption *options = 0 ) const ;
VImage cache( VOption *options = 0 ) const ;
VImage embed( int x , int y , int width , int height , VOption *options = 0 ) const ;
VImage gravity( VipsCompassDirection direction , int width , int height , VOption *options = 0 ) const ;
VImage flip( VipsDirection direction , VOption *options = 0 ) const ;
VImage insert( VImage sub , int x , int y , VOption *options = 0 ) const ;
VImage join( VImage in2 , VipsDirection direction , VOption *options = 0 ) const ;
static VImage arrayjoin( std::vector<VImage> in , VOption *options = 0 ) ;
VImage extract_area( int left , int top , int width , int height , VOption *options = 0 ) const ;
VImage smartcrop( int width , int height , VOption *options = 0 ) const ;
VImage extract_band( int band , VOption *options = 0 ) const ;
static VImage bandjoin( std::vector<VImage> in , VOption *options = 0 ) ;
VImage bandjoin_const( std::vector<double> c , VOption *options = 0 ) const ;
static VImage bandrank( std::vector<VImage> in , VOption *options = 0 ) ;
VImage bandmean( VOption *options = 0 ) const ;
VImage bandbool( VipsOperationBoolean boolean , VOption *options = 0 ) const ;
VImage replicate( int across , int down , VOption *options = 0 ) const ;
VImage cast( VipsBandFormat format , VOption *options = 0 ) const ;
VImage rot( VipsAngle angle , VOption *options = 0 ) const ;
VImage rot45( VOption *options = 0 ) const ;
VImage autorot( VOption *options = 0 ) const ;
VImage ifthenelse( VImage in1 , VImage in2 , VOption *options = 0 ) const ;
VImage recomb( VImage m , VOption *options = 0 ) const ;
VImage bandfold( VOption *options = 0 ) const ;
VImage bandunfold( VOption *options = 0 ) const ;
VImage flatten( VOption *options = 0 ) const ;
VImage premultiply( VOption *options = 0 ) const ;
VImage unpremultiply( VOption *options = 0 ) const ;
VImage grid( int tile_height , int across , int down , VOption *options = 0 ) const ;
VImage transpose3d( VOption *options = 0 ) const ;
VImage scale( VOption *options = 0 ) const ;
VImage wrap( VOption *options = 0 ) const ;
VImage zoom( int xfac , int yfac , VOption *options = 0 ) const ;
VImage subsample( int xfac , int yfac , VOption *options = 0 ) const ;
VImage msb( VOption *options = 0 ) const ;
VImage byteswap( VOption *options = 0 ) const ;
VImage falsecolour( VOption *options = 0 ) const ;
VImage gamma( VOption *options = 0 ) const ;
static VImage composite( std::vector<VImage> in , std::vector<int> mode , VOption *options = 0 ) ;
VImage composite2( VImage overlay , VipsBlendMode mode , VOption *options = 0 ) const ;
static VImage black( int width , int height , VOption *options = 0 ) ;
static VImage gaussnoise( int width , int height , VOption *options = 0 ) ;
static VImage text( char * text , VOption *options = 0 ) ;
static VImage xyz( int width , int height , VOption *options = 0 ) ;
static VImage gaussmat( double sigma , double min_ampl , VOption *options = 0 ) ;
static VImage logmat( double sigma , double min_ampl , VOption *options = 0 ) ;
static VImage eye( int width , int height , VOption *options = 0 ) ;
static VImage grey( int width , int height , VOption *options = 0 ) ;
static VImage zone( int width , int height , VOption *options = 0 ) ;
static VImage sines( int width , int height , VOption *options = 0 ) ;
static VImage mask_ideal( int width , int height , double frequency_cutoff , VOption *options = 0 ) ;
static VImage mask_ideal_ring( int width , int height , double frequency_cutoff , double ringwidth , VOption *options = 0 ) ;
static VImage mask_ideal_band( int width , int height , double frequency_cutoff_x , double frequency_cutoff_y , double radius , VOption *options = 0 ) ;
static VImage mask_butterworth( int width , int height , double order , double frequency_cutoff , double amplitude_cutoff , VOption *options = 0 ) ;
static VImage mask_butterworth_ring( int width , int height , double order , double frequency_cutoff , double amplitude_cutoff , double ringwidth , VOption *options = 0 ) ;
static VImage mask_butterworth_band( int width , int height , double order , double frequency_cutoff_x , double frequency_cutoff_y , double radius , double amplitude_cutoff , VOption *options = 0 ) ;
static VImage mask_gaussian( int width , int height , double frequency_cutoff , double amplitude_cutoff , VOption *options = 0 ) ;
static VImage mask_gaussian_ring( int width , int height , double frequency_cutoff , double amplitude_cutoff , double ringwidth , VOption *options = 0 ) ;
static VImage mask_gaussian_band( int width , int height , double frequency_cutoff_x , double frequency_cutoff_y , double radius , double amplitude_cutoff , VOption *options = 0 ) ;
static VImage mask_fractal( int width , int height , double fractal_dimension , VOption *options = 0 ) ;
VImage buildlut( VOption *options = 0 ) const ;
VImage invertlut( VOption *options = 0 ) const ;
static VImage tonelut( VOption *options = 0 ) ;
static VImage identity( VOption *options = 0 ) ;
static VImage fractsurf( int width , int height , double fractal_dimension , VOption *options = 0 ) ;
static VImage worley( int width , int height , VOption *options = 0 ) ;
static VImage perlin( int width , int height , VOption *options = 0 ) ;
static VImage csvload( char * filename , VOption *options = 0 ) ;
static VImage matrixload( char * filename , VOption *options = 0 ) ;
static VImage rawload( char * filename , int width , int height , int bands , VOption *options = 0 ) ;
static VImage vipsload( char * filename , VOption *options = 0 ) ;
static VImage analyzeload( char * filename , VOption *options = 0 ) ;
static VImage ppmload( char * filename , VOption *options = 0 ) ;
static VImage radload( char * filename , VOption *options = 0 ) ;
static VImage pdfload( char * filename , VOption *options = 0 ) ;
static VImage pdfload_buffer( VipsBlob * buffer , VOption *options = 0 ) ;
static VImage svgload( char * filename , VOption *options = 0 ) ;
static VImage svgload_buffer( VipsBlob * buffer , VOption *options = 0 ) ;
static VImage gifload( char * filename , VOption *options = 0 ) ;
static VImage gifload_buffer( VipsBlob * buffer , VOption *options = 0 ) ;
static VImage pngload( char * filename , VOption *options = 0 ) ;
static VImage pngload_buffer( VipsBlob * buffer , VOption *options = 0 ) ;
static VImage matload( char * filename , VOption *options = 0 ) ;
static VImage jpegload( char * filename , VOption *options = 0 ) ;
static VImage jpegload_buffer( VipsBlob * buffer , VOption *options = 0 ) ;
static VImage webpload( char * filename , VOption *options = 0 ) ;
static VImage webpload_buffer( VipsBlob * buffer , VOption *options = 0 ) ;
static VImage tiffload( char * filename , VOption *options = 0 ) ;
static VImage tiffload_buffer( VipsBlob * buffer , VOption *options = 0 ) ;
static VImage openslideload( char * filename , VOption *options = 0 ) ;
static VImage magickload( char * filename , VOption *options = 0 ) ;
static VImage magickload_buffer( VipsBlob * buffer , VOption *options = 0 ) ;
static VImage fitsload( char * filename , VOption *options = 0 ) ;
static VImage openexrload( char * filename , VOption *options = 0 ) ;
void csvsave( char * filename , VOption *options = 0 ) const ;
void matrixsave( char * filename , VOption *options = 0 ) const ;
void matrixprint( VOption *options = 0 ) const ;
void rawsave( char * filename , VOption *options = 0 ) const ;
void rawsave_fd( int fd , VOption *options = 0 ) const ;
void vipssave( char * filename , VOption *options = 0 ) const ;
void ppmsave( char * filename , VOption *options = 0 ) const ;
void radsave( char * filename , VOption *options = 0 ) const ;
VipsBlob * radsave_buffer( VOption *options = 0 ) const ;
void dzsave( char * filename , VOption *options = 0 ) const ;
VipsBlob * dzsave_buffer( VOption *options = 0 ) const ;
void pngsave( char * filename , VOption *options = 0 ) const ;
VipsBlob * pngsave_buffer( VOption *options = 0 ) const ;
void jpegsave( char * filename , VOption *options = 0 ) const ;
VipsBlob * jpegsave_buffer( VOption *options = 0 ) const ;
void jpegsave_mime( VOption *options = 0 ) const ;
void webpsave( char * filename , VOption *options = 0 ) const ;
VipsBlob * webpsave_buffer( VOption *options = 0 ) const ;
void tiffsave( char * filename , VOption *options = 0 ) const ;
VipsBlob * tiffsave_buffer( VOption *options = 0 ) const ;
void magicksave( char * filename , VOption *options = 0 ) const ;
VipsBlob * magicksave_buffer( VOption *options = 0 ) const ;
void fitssave( char * filename , VOption *options = 0 ) const ;
static VImage thumbnail( char * filename , int width , VOption *options = 0 ) ;
static VImage thumbnail_buffer( VipsBlob * buffer , int width , VOption *options = 0 ) ;
VImage thumbnail_image( int width , VOption *options = 0 ) const ;
VImage mapim( VImage index , VOption *options = 0 ) const ;
VImage shrink( double hshrink , double vshrink , VOption *options = 0 ) const ;
VImage shrinkh( int hshrink , VOption *options = 0 ) const ;
VImage shrinkv( int vshrink , VOption *options = 0 ) const ;
VImage reduceh( double hshrink , VOption *options = 0 ) const ;
VImage reducev( double vshrink , VOption *options = 0 ) const ;
VImage reduce( double hshrink , double vshrink , VOption *options = 0 ) const ;
VImage quadratic( VImage coeff , VOption *options = 0 ) const ;
VImage affine( std::vector<double> matrix , VOption *options = 0 ) const ;
VImage similarity( VOption *options = 0 ) const ;
VImage rotate( double angle , VOption *options = 0 ) const ;
VImage resize( double scale , VOption *options = 0 ) const ;
VImage colourspace( VipsInterpretation space , VOption *options = 0 ) const ;
VImage Lab2XYZ( VOption *options = 0 ) const ;
VImage XYZ2Lab( VOption *options = 0 ) const ;
VImage Lab2LCh( VOption *options = 0 ) const ;
VImage LCh2Lab( VOption *options = 0 ) const ;
VImage LCh2CMC( VOption *options = 0 ) const ;
VImage CMC2LCh( VOption *options = 0 ) const ;
VImage XYZ2Yxy( VOption *options = 0 ) const ;
VImage Yxy2XYZ( VOption *options = 0 ) const ;
VImage scRGB2XYZ( VOption *options = 0 ) const ;
VImage XYZ2scRGB( VOption *options = 0 ) const ;
VImage LabQ2Lab( VOption *options = 0 ) const ;
VImage Lab2LabQ( VOption *options = 0 ) const ;
VImage LabQ2LabS( VOption *options = 0 ) const ;
VImage LabS2LabQ( VOption *options = 0 ) const ;
VImage LabS2Lab( VOption *options = 0 ) const ;
VImage Lab2LabS( VOption *options = 0 ) const ;
VImage rad2float( VOption *options = 0 ) const ;
VImage float2rad( VOption *options = 0 ) const ;
VImage LabQ2sRGB( VOption *options = 0 ) const ;
VImage sRGB2HSV( VOption *options = 0 ) const ;
VImage HSV2sRGB( VOption *options = 0 ) const ;
VImage icc_import( VOption *options = 0 ) const ;
VImage icc_export( VOption *options = 0 ) const ;
VImage icc_transform( char * output_profile , VOption *options = 0 ) const ;
VImage dE76( VImage right , VOption *options = 0 ) const ;
VImage dE00( VImage right , VOption *options = 0 ) const ;
VImage dECMC( VImage right , VOption *options = 0 ) const ;
VImage sRGB2scRGB( VOption *options = 0 ) const ;
VImage scRGB2BW( VOption *options = 0 ) const ;
VImage scRGB2sRGB( VOption *options = 0 ) const ;
VImage maplut( VImage lut , VOption *options = 0 ) const ;
int percent( double percent , VOption *options = 0 ) const ;
VImage stdif( int width , int height , VOption *options = 0 ) const ;
VImage hist_cum( VOption *options = 0 ) const ;
VImage hist_match( VImage ref , VOption *options = 0 ) const ;
VImage hist_norm( VOption *options = 0 ) const ;
VImage hist_equal( VOption *options = 0 ) const ;
VImage hist_plot( VOption *options = 0 ) const ;
VImage hist_local( int width , int height , VOption *options = 0 ) const ;
bool hist_ismonotonic( VOption *options = 0 ) const ;
double hist_entropy( VOption *options = 0 ) const ;
VImage conv( VImage mask , VOption *options = 0 ) const ;
VImage conva( VImage mask , VOption *options = 0 ) const ;
VImage convf( VImage mask , VOption *options = 0 ) const ;
VImage convi( VImage mask , VOption *options = 0 ) const ;
VImage compass( VImage mask , VOption *options = 0 ) const ;
VImage convsep( VImage mask , VOption *options = 0 ) const ;
VImage convasep( VImage mask , VOption *options = 0 ) const ;
VImage fastcor( VImage ref , VOption *options = 0 ) const ;
VImage spcor( VImage ref , VOption *options = 0 ) const ;
VImage sharpen( VOption *options = 0 ) const ;
VImage gaussblur( double sigma , VOption *options = 0 ) const ;
VImage canny( VOption *options = 0 ) const ;
VImage sobel( VOption *options = 0 ) const ;
VImage fwfft( VOption *options = 0 ) const ;
VImage invfft( VOption *options = 0 ) const ;
VImage freqmult( VImage mask , VOption *options = 0 ) const ;
VImage spectrum( VOption *options = 0 ) const ;
VImage phasecor( VImage in2 , VOption *options = 0 ) const ;
VImage morph( VImage mask , VipsOperationMorphology morph , VOption *options = 0 ) const ;
VImage rank( int width , int height , int index , VOption *options = 0 ) const ;
double countlines( VipsDirection direction , VOption *options = 0 ) const ;
VImage labelregions( VOption *options = 0 ) const ;
VImage fill_nearest( VOption *options = 0 ) const ;
void draw_rect( std::vector<double> ink , int left , int top , int width , int height , VOption *options = 0 ) const ;
void draw_mask( std::vector<double> ink , VImage mask , int x , int y , VOption *options = 0 ) const ;
void draw_line( std::vector<double> ink , int x1 , int y1 , int x2 , int y2 , VOption *options = 0 ) const ;
void draw_circle( std::vector<double> ink , int cx , int cy , int radius , VOption *options = 0 ) const ;
void draw_flood( std::vector<double> ink , int x , int y , VOption *options = 0 ) const ;
void draw_image( VImage sub , int x , int y , VOption *options = 0 ) const ;
void draw_smudge( int left , int top , int width , int height , VOption *options = 0 ) const ;
VImage merge( VImage sec , VipsDirection direction , int dx , int dy , VOption *options = 0 ) const ;
VImage mosaic( VImage sec , VipsDirection direction , int xref , int yref , int xsec , int ysec , VOption *options = 0 ) const ;
VImage mosaic1( VImage sec , VipsDirection direction , int xr1 , int yr1 , int xs1 , int ys1 , int xr2 , int yr2 , int xs2 , int ys2 , VOption *options = 0 ) const ;
VImage match( VImage sec , int xr1 , int yr1 , int xs1 , int ys1 , int xr2 , int yr2 , int xs2 , int ys2 , VOption *options = 0 ) const ;
VImage globalbalance( VOption *options = 0 ) const ;
static void system( char *cmd_format, VOption *options = 0 );
VImage add( VImage right, VOption *options = 0 ) const;
VImage subtract( VImage right, VOption *options = 0 ) const;
VImage multiply( VImage right, VOption *options = 0 ) const;
VImage divide( VImage right, VOption *options = 0 ) const;
VImage relational( VImage right, VipsOperationRelational relational, VOption *options = 0 ) const;
VImage remainder( VImage right, VOption *options = 0 ) const;
VImage boolean( VImage right, VipsOperationBoolean boolean, VOption *options = 0 ) const;
VImage math2( VImage right, VipsOperationMath2 math2, VOption *options = 0 ) const;
VImage complex2( VImage right, VipsOperationComplex2 cmplx, VOption *options = 0 ) const;
VImage complexform( VImage right, VOption *options = 0 ) const;
static VImage sum( std::vector<VImage> in, VOption *options = 0 );
VImage invert( VOption *options = 0 ) const;
VImage linear( std::vector<double> a, std::vector<double> b, VOption *options = 0 ) const;
VImage math( VipsOperationMath math, VOption *options = 0 ) const;
VImage abs( VOption *options = 0 ) const;
VImage sign( VOption *options = 0 ) const;
VImage round( VipsOperationRound round, VOption *options = 0 ) const;
VImage relational_const( VipsOperationRelational relational, std::vector<double> c, VOption *options = 0 ) const;
VImage remainder_const( std::vector<double> c, VOption *options = 0 ) const;
VImage boolean_const( VipsOperationBoolean boolean, std::vector<double> c, VOption *options = 0 ) const;
VImage math2_const( VipsOperationMath2 math2, std::vector<double> c, VOption *options = 0 ) const;
VImage complex( VipsOperationComplex cmplx, VOption *options = 0 ) const;
VImage complexget( VipsOperationComplexget get, VOption *options = 0 ) const;
double avg( VOption *options = 0 ) const;
double min( VOption *options = 0 ) const;
double max( VOption *options = 0 ) const;
double deviate( VOption *options = 0 ) const;
VImage stats( VOption *options = 0 ) const;
VImage hist_find( VOption *options = 0 ) const;
VImage hist_find_ndim( VOption *options = 0 ) const;
VImage hist_find_indexed( VImage index, VOption *options = 0 ) const;
VImage hough_line( VOption *options = 0 ) const;
VImage hough_circle( VOption *options = 0 ) const;
VImage project( VImage *rows, VOption *options = 0 ) const;
VImage profile( VImage *rows, VOption *options = 0 ) const;
VImage measure( int h, int v, VOption *options = 0 ) const;
std::vector<double> getpoint( int x, int y, VOption *options = 0 ) const;
int find_trim( int *top, int *width, int *height, VOption *options = 0 ) const;
VImage copy( VOption *options = 0 ) const;
VImage tilecache( VOption *options = 0 ) const;
VImage linecache( VOption *options = 0 ) const;
VImage sequential( VOption *options = 0 ) const;
VImage cache( VOption *options = 0 ) const;
VImage embed( int x, int y, int width, int height, VOption *options = 0 ) const;
VImage gravity( VipsCompassDirection direction, int width, int height, VOption *options = 0 ) const;
VImage flip( VipsDirection direction, VOption *options = 0 ) const;
VImage insert( VImage sub, int x, int y, VOption *options = 0 ) const;
VImage join( VImage in2, VipsDirection direction, VOption *options = 0 ) const;
static VImage arrayjoin( std::vector<VImage> in, VOption *options = 0 );
VImage extract_area( int left, int top, int width, int height, VOption *options = 0 ) const;
VImage smartcrop( int width, int height, VOption *options = 0 ) const;
VImage extract_band( int band, VOption *options = 0 ) const;
static VImage bandjoin( std::vector<VImage> in, VOption *options = 0 );
VImage bandjoin_const( std::vector<double> c, VOption *options = 0 ) const;
static VImage bandrank( std::vector<VImage> in, VOption *options = 0 );
VImage bandmean( VOption *options = 0 ) const;
VImage bandbool( VipsOperationBoolean boolean, VOption *options = 0 ) const;
VImage replicate( int across, int down, VOption *options = 0 ) const;
VImage cast( VipsBandFormat format, VOption *options = 0 ) const;
VImage rot( VipsAngle angle, VOption *options = 0 ) const;
VImage rot45( VOption *options = 0 ) const;
VImage autorot( VOption *options = 0 ) const;
VImage ifthenelse( VImage in1, VImage in2, VOption *options = 0 ) const;
VImage recomb( VImage m, VOption *options = 0 ) const;
VImage bandfold( VOption *options = 0 ) const;
VImage bandunfold( VOption *options = 0 ) const;
VImage flatten( VOption *options = 0 ) const;
VImage premultiply( VOption *options = 0 ) const;
VImage unpremultiply( VOption *options = 0 ) const;
VImage grid( int tile_height, int across, int down, VOption *options = 0 ) const;
VImage transpose3d( VOption *options = 0 ) const;
VImage scale( VOption *options = 0 ) const;
VImage wrap( VOption *options = 0 ) const;
VImage zoom( int xfac, int yfac, VOption *options = 0 ) const;
VImage subsample( int xfac, int yfac, VOption *options = 0 ) const;
VImage msb( VOption *options = 0 ) const;
VImage byteswap( VOption *options = 0 ) const;
VImage falsecolour( VOption *options = 0 ) const;
VImage gamma( VOption *options = 0 ) const;
static VImage composite( std::vector<VImage> in, std::vector<int> mode, VOption *options = 0 );
VImage composite2( VImage overlay, VipsBlendMode mode, VOption *options = 0 ) const;
static VImage black( int width, int height, VOption *options = 0 );
static VImage gaussnoise( int width, int height, VOption *options = 0 );
static VImage text( char *text, VOption *options = 0 );
static VImage xyz( int width, int height, VOption *options = 0 );
static VImage gaussmat( double sigma, double min_ampl, VOption *options = 0 );
static VImage logmat( double sigma, double min_ampl, VOption *options = 0 );
static VImage eye( int width, int height, VOption *options = 0 );
static VImage grey( int width, int height, VOption *options = 0 );
static VImage zone( int width, int height, VOption *options = 0 );
static VImage sines( int width, int height, VOption *options = 0 );
static VImage mask_ideal( int width, int height, double frequency_cutoff, VOption *options = 0 );
static VImage mask_ideal_ring( int width, int height, double frequency_cutoff, double ringwidth, VOption *options = 0 );
static VImage mask_ideal_band( int width, int height, double frequency_cutoff_x, double frequency_cutoff_y, double radius, VOption *options = 0 );
static VImage mask_butterworth( int width, int height, double order, double frequency_cutoff, double amplitude_cutoff, VOption *options = 0 );
static VImage mask_butterworth_ring( int width, int height, double order, double frequency_cutoff, double amplitude_cutoff, double ringwidth, VOption *options = 0 );
static VImage mask_butterworth_band( int width, int height, double order, double frequency_cutoff_x, double frequency_cutoff_y, double radius, double amplitude_cutoff, VOption *options = 0 );
static VImage mask_gaussian( int width, int height, double frequency_cutoff, double amplitude_cutoff, VOption *options = 0 );
static VImage mask_gaussian_ring( int width, int height, double frequency_cutoff, double amplitude_cutoff, double ringwidth, VOption *options = 0 );
static VImage mask_gaussian_band( int width, int height, double frequency_cutoff_x, double frequency_cutoff_y, double radius, double amplitude_cutoff, VOption *options = 0 );
static VImage mask_fractal( int width, int height, double fractal_dimension, VOption *options = 0 );
VImage buildlut( VOption *options = 0 ) const;
VImage invertlut( VOption *options = 0 ) const;
static VImage tonelut( VOption *options = 0 );
static VImage identity( VOption *options = 0 );
static VImage fractsurf( int width, int height, double fractal_dimension, VOption *options = 0 );
static VImage worley( int width, int height, VOption *options = 0 );
static VImage perlin( int width, int height, VOption *options = 0 );
static VImage csvload( char *filename, VOption *options = 0 );
static VImage matrixload( char *filename, VOption *options = 0 );
static VImage rawload( char *filename, int width, int height, int bands, VOption *options = 0 );
static VImage vipsload( char *filename, VOption *options = 0 );
static VImage analyzeload( char *filename, VOption *options = 0 );
static VImage ppmload( char *filename, VOption *options = 0 );
static VImage radload( char *filename, VOption *options = 0 );
static VImage pdfload( char *filename, VOption *options = 0 );
static VImage pdfload_buffer( VipsBlob *buffer, VOption *options = 0 );
static VImage svgload( char *filename, VOption *options = 0 );
static VImage svgload_buffer( VipsBlob *buffer, VOption *options = 0 );
static VImage gifload( char *filename, VOption *options = 0 );
static VImage gifload_buffer( VipsBlob *buffer, VOption *options = 0 );
static VImage pngload( char *filename, VOption *options = 0 );
static VImage pngload_buffer( VipsBlob *buffer, VOption *options = 0 );
static VImage matload( char *filename, VOption *options = 0 );
static VImage jpegload( char *filename, VOption *options = 0 );
static VImage jpegload_buffer( VipsBlob *buffer, VOption *options = 0 );
static VImage webpload( char *filename, VOption *options = 0 );
static VImage webpload_buffer( VipsBlob *buffer, VOption *options = 0 );
static VImage tiffload( char *filename, VOption *options = 0 );
static VImage tiffload_buffer( VipsBlob *buffer, VOption *options = 0 );
static VImage openslideload( char *filename, VOption *options = 0 );
static VImage magickload( char *filename, VOption *options = 0 );
static VImage magickload_buffer( VipsBlob *buffer, VOption *options = 0 );
static VImage fitsload( char *filename, VOption *options = 0 );
static VImage openexrload( char *filename, VOption *options = 0 );
void csvsave( char *filename, VOption *options = 0 ) const;
void matrixsave( char *filename, VOption *options = 0 ) const;
void matrixprint( VOption *options = 0 ) const;
void rawsave( char *filename, VOption *options = 0 ) const;
void rawsave_fd( int fd, VOption *options = 0 ) const;
void vipssave( char *filename, VOption *options = 0 ) const;
void ppmsave( char *filename, VOption *options = 0 ) const;
void radsave( char *filename, VOption *options = 0 ) const;
VipsBlob *radsave_buffer( VOption *options = 0 ) const;
void dzsave( char *filename, VOption *options = 0 ) const;
VipsBlob *dzsave_buffer( VOption *options = 0 ) const;
void pngsave( char *filename, VOption *options = 0 ) const;
VipsBlob *pngsave_buffer( VOption *options = 0 ) const;
void jpegsave( char *filename, VOption *options = 0 ) const;
VipsBlob *jpegsave_buffer( VOption *options = 0 ) const;
void jpegsave_mime( VOption *options = 0 ) const;
void webpsave( char *filename, VOption *options = 0 ) const;
VipsBlob *webpsave_buffer( VOption *options = 0 ) const;
void tiffsave( char *filename, VOption *options = 0 ) const;
VipsBlob *tiffsave_buffer( VOption *options = 0 ) const;
void magicksave( char *filename, VOption *options = 0 ) const;
VipsBlob *magicksave_buffer( VOption *options = 0 ) const;
void fitssave( char *filename, VOption *options = 0 ) const;
static VImage thumbnail( char *filename, int width, VOption *options = 0 );
static VImage thumbnail_buffer( VipsBlob *buffer, int width, VOption *options = 0 );
VImage thumbnail_image( int width, VOption *options = 0 ) const;
VImage mapim( VImage index, VOption *options = 0 ) const;
VImage shrink( double hshrink, double vshrink, VOption *options = 0 ) const;
VImage shrinkh( int hshrink, VOption *options = 0 ) const;
VImage shrinkv( int vshrink, VOption *options = 0 ) const;
VImage reduceh( double hshrink, VOption *options = 0 ) const;
VImage reducev( double vshrink, VOption *options = 0 ) const;
VImage reduce( double hshrink, double vshrink, VOption *options = 0 ) const;
VImage quadratic( VImage coeff, VOption *options = 0 ) const;
VImage affine( std::vector<double> matrix, VOption *options = 0 ) const;
VImage similarity( VOption *options = 0 ) const;
VImage rotate( double angle, VOption *options = 0 ) const;
VImage resize( double scale, VOption *options = 0 ) const;
VImage colourspace( VipsInterpretation space, VOption *options = 0 ) const;
VImage Lab2XYZ( VOption *options = 0 ) const;
VImage XYZ2Lab( VOption *options = 0 ) const;
VImage Lab2LCh( VOption *options = 0 ) const;
VImage LCh2Lab( VOption *options = 0 ) const;
VImage LCh2CMC( VOption *options = 0 ) const;
VImage CMC2LCh( VOption *options = 0 ) const;
VImage XYZ2Yxy( VOption *options = 0 ) const;
VImage Yxy2XYZ( VOption *options = 0 ) const;
VImage scRGB2XYZ( VOption *options = 0 ) const;
VImage XYZ2scRGB( VOption *options = 0 ) const;
VImage LabQ2Lab( VOption *options = 0 ) const;
VImage Lab2LabQ( VOption *options = 0 ) const;
VImage LabQ2LabS( VOption *options = 0 ) const;
VImage LabS2LabQ( VOption *options = 0 ) const;
VImage LabS2Lab( VOption *options = 0 ) const;
VImage Lab2LabS( VOption *options = 0 ) const;
VImage rad2float( VOption *options = 0 ) const;
VImage float2rad( VOption *options = 0 ) const;
VImage LabQ2sRGB( VOption *options = 0 ) const;
VImage sRGB2HSV( VOption *options = 0 ) const;
VImage HSV2sRGB( VOption *options = 0 ) const;
VImage icc_import( VOption *options = 0 ) const;
VImage icc_export( VOption *options = 0 ) const;
VImage icc_transform( char *output_profile, VOption *options = 0 ) const;
VImage dE76( VImage right, VOption *options = 0 ) const;
VImage dE00( VImage right, VOption *options = 0 ) const;
VImage dECMC( VImage right, VOption *options = 0 ) const;
VImage sRGB2scRGB( VOption *options = 0 ) const;
VImage scRGB2BW( VOption *options = 0 ) const;
VImage scRGB2sRGB( VOption *options = 0 ) const;
VImage maplut( VImage lut, VOption *options = 0 ) const;
int percent( double percent, VOption *options = 0 ) const;
VImage stdif( int width, int height, VOption *options = 0 ) const;
VImage hist_cum( VOption *options = 0 ) const;
VImage hist_match( VImage ref, VOption *options = 0 ) const;
VImage hist_norm( VOption *options = 0 ) const;
VImage hist_equal( VOption *options = 0 ) const;
VImage hist_plot( VOption *options = 0 ) const;
VImage hist_local( int width, int height, VOption *options = 0 ) const;
bool hist_ismonotonic( VOption *options = 0 ) const;
double hist_entropy( VOption *options = 0 ) const;
VImage conv( VImage mask, VOption *options = 0 ) const;
VImage conva( VImage mask, VOption *options = 0 ) const;
VImage convf( VImage mask, VOption *options = 0 ) const;
VImage convi( VImage mask, VOption *options = 0 ) const;
VImage compass( VImage mask, VOption *options = 0 ) const;
VImage convsep( VImage mask, VOption *options = 0 ) const;
VImage convasep( VImage mask, VOption *options = 0 ) const;
VImage fastcor( VImage ref, VOption *options = 0 ) const;
VImage spcor( VImage ref, VOption *options = 0 ) const;
VImage sharpen( VOption *options = 0 ) const;
VImage gaussblur( double sigma, VOption *options = 0 ) const;
VImage canny( VOption *options = 0 ) const;
VImage sobel( VOption *options = 0 ) const;
VImage fwfft( VOption *options = 0 ) const;
VImage invfft( VOption *options = 0 ) const;
VImage freqmult( VImage mask, VOption *options = 0 ) const;
VImage spectrum( VOption *options = 0 ) const;
VImage phasecor( VImage in2, VOption *options = 0 ) const;
VImage morph( VImage mask, VipsOperationMorphology morph, VOption *options = 0 ) const;
VImage rank( int width, int height, int index, VOption *options = 0 ) const;
double countlines( VipsDirection direction, VOption *options = 0 ) const;
VImage labelregions( VOption *options = 0 ) const;
VImage fill_nearest( VOption *options = 0 ) const;
void draw_rect( std::vector<double> ink, int left, int top, int width, int height, VOption *options = 0 ) const;
void draw_mask( std::vector<double> ink, VImage mask, int x, int y, VOption *options = 0 ) const;
void draw_line( std::vector<double> ink, int x1, int y1, int x2, int y2, VOption *options = 0 ) const;
void draw_circle( std::vector<double> ink, int cx, int cy, int radius, VOption *options = 0 ) const;
void draw_flood( std::vector<double> ink, int x, int y, VOption *options = 0 ) const;
void draw_image( VImage sub, int x, int y, VOption *options = 0 ) const;
void draw_smudge( int left, int top, int width, int height, VOption *options = 0 ) const;
VImage merge( VImage sec, VipsDirection direction, int dx, int dy, VOption *options = 0 ) const;
VImage mosaic( VImage sec, VipsDirection direction, int xref, int yref, int xsec, int ysec, VOption *options = 0 ) const;
VImage mosaic1( VImage sec, VipsDirection direction, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, VOption *options = 0 ) const;
VImage match( VImage sec, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, VOption *options = 0 ) const;
VImage globalbalance( VOption *options = 0 ) const;
// These operators have been added recently:
VImage CMYK2XYZ( VOption *options = 0 ) const;
VImage XYZ2CMYK( VOption *options = 0 ) const;
static VImage niftiload( char *filename, VOption *options = 0 );
void niftisave( char *filename, VOption *options = 0 ) const;
static VipsBlob *profile_load( char *name, VOption *options = 0 );

File diff suppressed because it is too large Load Diff