mask builders take prec, not integer
vips_gaussmat() and vips_logmat() used to default to float, but vips_conv() defaulted to int ... so this failed: vips gaussmat m.v 2 0.1 --separable vips convsep k2.jpg x.jpg m.v since we were using a small float mask with an integer convolution This change makes everything int by default, with gaussmat having a new param called --precision whose arg can be int or float. The old @integer param is deprecated.
This commit is contained in:
parent
1f85ef7fbb
commit
6e2135d8b5
@ -7,6 +7,8 @@
|
|||||||
- support tiff XMP metadata
|
- support tiff XMP metadata
|
||||||
- support @density arg to magickload [Lovell]
|
- support @density arg to magickload [Lovell]
|
||||||
- support python3.4 and python2.7 in new python binding
|
- support python3.4 and python2.7 in new python binding
|
||||||
|
- vips_gaussmat() and vips_logmat() are now int by default, to match
|
||||||
|
vips_conv(), and use @precision, not @integer
|
||||||
|
|
||||||
25/7/14 started 7.41.0
|
25/7/14 started 7.41.0
|
||||||
- start working on --disable-deprecated
|
- start working on --disable-deprecated
|
||||||
|
12
TODO
12
TODO
@ -1,15 +1,3 @@
|
|||||||
- try:
|
|
||||||
|
|
||||||
vips gaussmat m2.v 2 0.1 --separable
|
|
||||||
vips convsep k2.jpg x2.jpg m2.v
|
|
||||||
eog x2.jpg
|
|
||||||
|
|
||||||
it's too bright ... because gaussmat makes a float mask by default, but
|
|
||||||
conv does an int convolution by default
|
|
||||||
|
|
||||||
rather than an --integer switch on gaussmat, should it take --precision
|
|
||||||
instead, and default to INT, like conv?
|
|
||||||
|
|
||||||
- configure should check for pygobject too
|
- configure should check for pygobject too
|
||||||
|
|
||||||
PKG_CHECK_MODULES(PYTHON, [pygobject-3.0 >= $PYGOBJECT_REQUIRED])
|
PKG_CHECK_MODULES(PYTHON, [pygobject-3.0 >= $PYGOBJECT_REQUIRED])
|
||||||
|
@ -75,7 +75,7 @@ vips_gaussblur_build( VipsObject *object )
|
|||||||
|
|
||||||
if( vips_gaussmat( &t[0], gaussblur->sigma, gaussblur->min_ampl,
|
if( vips_gaussmat( &t[0], gaussblur->sigma, gaussblur->min_ampl,
|
||||||
"separable", TRUE,
|
"separable", TRUE,
|
||||||
"integer", gaussblur->precision != VIPS_PRECISION_FLOAT,
|
"precision", gaussblur->precision,
|
||||||
NULL ) )
|
NULL ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
|
@ -236,7 +236,7 @@ vips_sharpen_build( VipsObject *object )
|
|||||||
*/
|
*/
|
||||||
if( vips_gaussmat( &t[1], 1 + sharpen->radius / 2, 0.2,
|
if( vips_gaussmat( &t[1], 1 + sharpen->radius / 2, 0.2,
|
||||||
"separable", TRUE,
|
"separable", TRUE,
|
||||||
"integer", TRUE,
|
"precision", VIPS_PRECISION_INTEGER,
|
||||||
NULL ) )
|
NULL ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
|
@ -15,6 +15,9 @@
|
|||||||
* - gtkdoc
|
* - gtkdoc
|
||||||
* 20/10/13
|
* 20/10/13
|
||||||
* - redone as a class
|
* - redone as a class
|
||||||
|
* 16/12/14
|
||||||
|
* - default to int output to match vips_conv()
|
||||||
|
* - use @precision, not @integer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -69,7 +72,8 @@ typedef struct _VipsGaussmat {
|
|||||||
double min_ampl;
|
double min_ampl;
|
||||||
|
|
||||||
gboolean separable;
|
gboolean separable;
|
||||||
gboolean integer;
|
gboolean integer; /* Deprecated */
|
||||||
|
VipsPrecision precision;
|
||||||
|
|
||||||
} VipsGaussmat;
|
} VipsGaussmat;
|
||||||
|
|
||||||
@ -96,6 +100,13 @@ vips_gaussmat_build( VipsObject *object )
|
|||||||
if( VIPS_OBJECT_CLASS( vips_gaussmat_parent_class )->build( object ) )
|
if( VIPS_OBJECT_CLASS( vips_gaussmat_parent_class )->build( object ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
|
if( vips_object_argument_isset( object, "integer" ) )
|
||||||
|
vips_warn( class->nickname,
|
||||||
|
"'integer' is deprecated, use 'precision' instead" );
|
||||||
|
if( vips_check_precision_intfloat( class->nickname,
|
||||||
|
gaussmat->precision ) )
|
||||||
|
return( -1 );
|
||||||
|
|
||||||
/* Find the size of the mask. Limit the mask size to 10k x 10k for
|
/* Find the size of the mask. Limit the mask size to 10k x 10k for
|
||||||
* sanity.
|
* sanity.
|
||||||
*/
|
*/
|
||||||
@ -129,7 +140,7 @@ vips_gaussmat_build( VipsObject *object )
|
|||||||
double distance = xo * xo + yo * yo;
|
double distance = xo * xo + yo * yo;
|
||||||
double v = exp( -distance / sig2 );
|
double v = exp( -distance / sig2 );
|
||||||
|
|
||||||
if( gaussmat->integer )
|
if( gaussmat->precision == VIPS_PRECISION_INTEGER )
|
||||||
v = VIPS_RINT( 20 * v );
|
v = VIPS_RINT( 20 * v );
|
||||||
|
|
||||||
*VIPS_MATRIX( create->out, x, y ) = v;
|
*VIPS_MATRIX( create->out, x, y ) = v;
|
||||||
@ -180,10 +191,17 @@ vips_gaussmat_class_init( VipsGaussmatClass *class )
|
|||||||
VIPS_ARG_BOOL( class, "integer", 5,
|
VIPS_ARG_BOOL( class, "integer", 5,
|
||||||
_( "Integer" ),
|
_( "Integer" ),
|
||||||
_( "Generate integer Gaussian" ),
|
_( "Generate integer Gaussian" ),
|
||||||
VIPS_ARGUMENT_OPTIONAL_INPUT,
|
VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
|
||||||
G_STRUCT_OFFSET( VipsGaussmat, integer ),
|
G_STRUCT_OFFSET( VipsGaussmat, integer ),
|
||||||
FALSE );
|
FALSE );
|
||||||
|
|
||||||
|
VIPS_ARG_ENUM( class, "precision", 6,
|
||||||
|
_( "Precision" ),
|
||||||
|
_( "Generate with this precision" ),
|
||||||
|
VIPS_ARGUMENT_OPTIONAL_INPUT,
|
||||||
|
G_STRUCT_OFFSET( VipsGaussmat, precision ),
|
||||||
|
VIPS_TYPE_PRECISION, VIPS_PRECISION_INTEGER );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -191,6 +209,7 @@ vips_gaussmat_init( VipsGaussmat *gaussmat )
|
|||||||
{
|
{
|
||||||
gaussmat->sigma = 1;
|
gaussmat->sigma = 1;
|
||||||
gaussmat->min_ampl = 0.1;
|
gaussmat->min_ampl = 0.1;
|
||||||
|
gaussmat->precision = VIPS_PRECISION_INTEGER;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -203,7 +222,7 @@ vips_gaussmat_init( VipsGaussmat *gaussmat )
|
|||||||
* Optional arguments:
|
* Optional arguments:
|
||||||
*
|
*
|
||||||
* @separable: generate a separable gaussian
|
* @separable: generate a separable gaussian
|
||||||
* @integer: generate an integer gaussian
|
* @precision: #VipsPrecision for @out
|
||||||
*
|
*
|
||||||
* Creates a circularly symmetric Gaussian image of radius
|
* Creates a circularly symmetric Gaussian image of radius
|
||||||
* @sigma. The size of the mask is determined by the variable @min_ampl;
|
* @sigma. The size of the mask is determined by the variable @min_ampl;
|
||||||
@ -215,13 +234,13 @@ vips_gaussmat_init( VipsGaussmat *gaussmat )
|
|||||||
* H(r) = exp( -(r * r) / (2 * @sigma * @sigma) )
|
* H(r) = exp( -(r * r) / (2 * @sigma * @sigma) )
|
||||||
*
|
*
|
||||||
* The generated image has odd size and its maximum value is normalised to
|
* The generated image has odd size and its maximum value is normalised to
|
||||||
* 1.0, unless @integer is set.
|
* 1.0, unless @precision is #VIPS_PRECISION_INTEGER.
|
||||||
*
|
*
|
||||||
* If @separable is set, only the centre horizontal is generated. This is
|
* If @separable is set, only the centre horizontal is generated. This is
|
||||||
* useful for separable convolutions.
|
* useful for separable convolutions.
|
||||||
*
|
*
|
||||||
* If @integer is set, an integer gaussian is generated. This is useful for
|
* If @precision is #VIPS_PRECISION_INTEGER, an integer gaussian is generated.
|
||||||
* integer convolutions.
|
* This is useful for integer convolutions.
|
||||||
*
|
*
|
||||||
* "scale" is set to the sum of all the mask elements.
|
* "scale" is set to the sum of all the mask elements.
|
||||||
*
|
*
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
* - gtkdoc
|
* - gtkdoc
|
||||||
* 20/10/13
|
* 20/10/13
|
||||||
* - redone as a class from logmat.c
|
* - redone as a class from logmat.c
|
||||||
|
* 16/12/14
|
||||||
|
* - default to int output to match vips_conv()
|
||||||
|
* - use @precision, not @integer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -68,7 +71,8 @@ typedef struct _VipsLogmat {
|
|||||||
double min_ampl;
|
double min_ampl;
|
||||||
|
|
||||||
gboolean separable;
|
gboolean separable;
|
||||||
gboolean integer;
|
gboolean integer; /* Deprecated */
|
||||||
|
VipsPrecision precision;
|
||||||
|
|
||||||
} VipsLogmat;
|
} VipsLogmat;
|
||||||
|
|
||||||
@ -95,6 +99,13 @@ vips_logmat_build( VipsObject *object )
|
|||||||
if( VIPS_OBJECT_CLASS( vips_logmat_parent_class )->build( object ) )
|
if( VIPS_OBJECT_CLASS( vips_logmat_parent_class )->build( object ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
|
if( vips_object_argument_isset( object, "integer" ) )
|
||||||
|
vips_warn( class->nickname,
|
||||||
|
"'integer' is deprecated, use 'precision' instead" );
|
||||||
|
if( vips_check_precision_intfloat( class->nickname,
|
||||||
|
logmat->precision ) )
|
||||||
|
return( -1 );
|
||||||
|
|
||||||
/* Find the size of the mask. We want to eval the mask out to the
|
/* Find the size of the mask. We want to eval the mask out to the
|
||||||
* flat zero part, ie. beyond the minimum and to the point where it
|
* flat zero part, ie. beyond the minimum and to the point where it
|
||||||
* comes back up towards zero.
|
* comes back up towards zero.
|
||||||
@ -153,7 +164,7 @@ vips_logmat_build( VipsObject *object )
|
|||||||
(2.0 - (distance / sig2)) *
|
(2.0 - (distance / sig2)) *
|
||||||
exp( -distance / (2.0 * sig2) );
|
exp( -distance / (2.0 * sig2) );
|
||||||
|
|
||||||
if( logmat->integer )
|
if( logmat->precision == VIPS_PRECISION_INTEGER )
|
||||||
v = VIPS_RINT( 20 * v );
|
v = VIPS_RINT( 20 * v );
|
||||||
|
|
||||||
*VIPS_MATRIX( create->out, x, y ) = v;
|
*VIPS_MATRIX( create->out, x, y ) = v;
|
||||||
@ -204,10 +215,17 @@ vips_logmat_class_init( VipsLogmatClass *class )
|
|||||||
VIPS_ARG_BOOL( class, "integer", 5,
|
VIPS_ARG_BOOL( class, "integer", 5,
|
||||||
_( "Integer" ),
|
_( "Integer" ),
|
||||||
_( "Generate integer Logmatian" ),
|
_( "Generate integer Logmatian" ),
|
||||||
VIPS_ARGUMENT_OPTIONAL_INPUT,
|
VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
|
||||||
G_STRUCT_OFFSET( VipsLogmat, integer ),
|
G_STRUCT_OFFSET( VipsLogmat, integer ),
|
||||||
FALSE );
|
FALSE );
|
||||||
|
|
||||||
|
VIPS_ARG_ENUM( class, "precision", 6,
|
||||||
|
_( "Precision" ),
|
||||||
|
_( "Generate with this precision" ),
|
||||||
|
VIPS_ARGUMENT_OPTIONAL_INPUT,
|
||||||
|
G_STRUCT_OFFSET( VipsLogmat, precision ),
|
||||||
|
VIPS_TYPE_PRECISION, VIPS_PRECISION_INTEGER );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -215,6 +233,7 @@ vips_logmat_init( VipsLogmat *logmat )
|
|||||||
{
|
{
|
||||||
logmat->sigma = 1;
|
logmat->sigma = 1;
|
||||||
logmat->min_ampl = 0.1;
|
logmat->min_ampl = 0.1;
|
||||||
|
logmat->precision = VIPS_PRECISION_INTEGER;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -226,8 +245,8 @@ vips_logmat_init( VipsLogmat *logmat )
|
|||||||
*
|
*
|
||||||
* Optional arguments:
|
* Optional arguments:
|
||||||
*
|
*
|
||||||
* @separable: generate a separable logmatian
|
* @separable: generate a separable mask
|
||||||
* @integer: generate an integer logmatian
|
* @precision: #VipsPrecision for @out
|
||||||
*
|
*
|
||||||
* Creates a circularly symmetric Laplacian of Gaussian mask
|
* Creates a circularly symmetric Laplacian of Gaussian mask
|
||||||
* of radius
|
* of radius
|
||||||
@ -246,13 +265,13 @@ vips_logmat_init( VipsLogmat *logmat )
|
|||||||
* where s2 = @sigma * @sigma, s4 = s2 * s2, r2 = r * r.
|
* where s2 = @sigma * @sigma, s4 = s2 * s2, r2 = r * r.
|
||||||
*
|
*
|
||||||
* The generated mask has odd size and its maximum value is normalised to
|
* The generated mask has odd size and its maximum value is normalised to
|
||||||
* 1.0, unless @integer is set.
|
* 1.0, unless @precision is #VIPS_PRECISION_INTEGER.
|
||||||
*
|
*
|
||||||
* If @separable is set, only the centre horizontal is generated. This is
|
* If @separable is set, only the centre horizontal is generated. This is
|
||||||
* useful for separable convolutions.
|
* useful for separable convolutions.
|
||||||
*
|
*
|
||||||
* If @integer is set, an integer logmatian is generated. This is useful for
|
* If @precision is #VIPS_PRECISION_INTEGER, an integer mask is generated.
|
||||||
* integer convolutions.
|
* This is useful for integer convolutions.
|
||||||
*
|
*
|
||||||
* "scale" is set to the sum of all the mask elements.
|
* "scale" is set to the sum of all the mask elements.
|
||||||
*
|
*
|
||||||
|
@ -2169,6 +2169,7 @@ im_gauss_dmask( const char *filename, double sigma, double min_ampl )
|
|||||||
DOUBLEMASK *msk;
|
DOUBLEMASK *msk;
|
||||||
|
|
||||||
if( vips_gaussmat( &t, sigma, min_ampl,
|
if( vips_gaussmat( &t, sigma, min_ampl,
|
||||||
|
"precision", VIPS_PRECISION_FLOAT,
|
||||||
NULL ) )
|
NULL ) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
if( !(msk = im_vips2mask( t, filename )) ) {
|
if( !(msk = im_vips2mask( t, filename )) ) {
|
||||||
@ -2187,6 +2188,7 @@ im_gauss_dmask_sep( const char *filename, double sigma, double min_ampl )
|
|||||||
DOUBLEMASK *msk;
|
DOUBLEMASK *msk;
|
||||||
|
|
||||||
if( vips_gaussmat( &t, sigma, min_ampl,
|
if( vips_gaussmat( &t, sigma, min_ampl,
|
||||||
|
"precision", VIPS_PRECISION_FLOAT,
|
||||||
"separable", TRUE,
|
"separable", TRUE,
|
||||||
NULL ) )
|
NULL ) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
@ -2205,9 +2207,7 @@ im_gauss_imask( const char *filename, double sigma, double min_ampl )
|
|||||||
VipsImage *t;
|
VipsImage *t;
|
||||||
INTMASK *msk;
|
INTMASK *msk;
|
||||||
|
|
||||||
if( vips_gaussmat( &t, sigma, min_ampl,
|
if( vips_gaussmat( &t, sigma, min_ampl, NULL ) )
|
||||||
"integer", TRUE,
|
|
||||||
NULL ) )
|
|
||||||
return( NULL );
|
return( NULL );
|
||||||
if( !(msk = im_vips2imask( t, filename )) ) {
|
if( !(msk = im_vips2imask( t, filename )) ) {
|
||||||
g_object_unref( t );
|
g_object_unref( t );
|
||||||
@ -2225,7 +2225,6 @@ im_gauss_imask_sep( const char *filename, double sigma, double min_ampl )
|
|||||||
INTMASK *msk;
|
INTMASK *msk;
|
||||||
|
|
||||||
if( vips_gaussmat( &t, sigma, min_ampl,
|
if( vips_gaussmat( &t, sigma, min_ampl,
|
||||||
"integer", TRUE,
|
|
||||||
"separable", TRUE,
|
"separable", TRUE,
|
||||||
NULL ) )
|
NULL ) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
@ -2244,9 +2243,7 @@ im_log_imask( const char *filename, double sigma, double min_ampl )
|
|||||||
VipsImage *t;
|
VipsImage *t;
|
||||||
INTMASK *msk;
|
INTMASK *msk;
|
||||||
|
|
||||||
if( vips_logmat( &t, sigma, min_ampl,
|
if( vips_logmat( &t, sigma, min_ampl, NULL ) )
|
||||||
"integer", TRUE,
|
|
||||||
NULL ) )
|
|
||||||
return( NULL );
|
return( NULL );
|
||||||
if( !(msk = im_vips2imask( t, filename )) ) {
|
if( !(msk = im_vips2imask( t, filename )) ) {
|
||||||
g_object_unref( t );
|
g_object_unref( t );
|
||||||
@ -2264,6 +2261,7 @@ im_log_dmask( const char *filename, double sigma, double min_ampl )
|
|||||||
DOUBLEMASK *msk;
|
DOUBLEMASK *msk;
|
||||||
|
|
||||||
if( vips_logmat( &t, sigma, min_ampl,
|
if( vips_logmat( &t, sigma, min_ampl,
|
||||||
|
"precision", VIPS_PRECISION_FLOAT,
|
||||||
NULL ) )
|
NULL ) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
if( !(msk = im_vips2mask( t, filename )) ) {
|
if( !(msk = im_vips2mask( t, filename )) ) {
|
||||||
|
@ -69,6 +69,7 @@ vips_scan_headers = \
|
|||||||
${top_srcdir}/libvips/include/vips/convolution.h \
|
${top_srcdir}/libvips/include/vips/convolution.h \
|
||||||
${top_srcdir}/libvips/include/vips/morphology.h \
|
${top_srcdir}/libvips/include/vips/morphology.h \
|
||||||
${top_srcdir}/libvips/include/vips/draw.h \
|
${top_srcdir}/libvips/include/vips/draw.h \
|
||||||
|
${top_srcdir}/libvips/include/vips/basic.h \
|
||||||
${top_srcdir}/libvips/include/vips/object.h
|
${top_srcdir}/libvips/include/vips/object.h
|
||||||
|
|
||||||
enumtypes.h: $(vips_scan_headers) Makefile
|
enumtypes.h: $(vips_scan_headers) Makefile
|
||||||
|
@ -59,6 +59,13 @@ typedef void *(*VipsSListMap4Fn)( void *item,
|
|||||||
typedef void *(*VipsSListFold2Fn)( void *item,
|
typedef void *(*VipsSListFold2Fn)( void *item,
|
||||||
void *a, void *b, void *c );
|
void *a, void *b, void *c );
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
VIPS_PRECISION_INTEGER,
|
||||||
|
VIPS_PRECISION_FLOAT,
|
||||||
|
VIPS_PRECISION_APPROXIMATE,
|
||||||
|
VIPS_PRECISION_LAST
|
||||||
|
} VipsPrecision;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /*__cplusplus*/
|
#endif /*__cplusplus*/
|
||||||
|
@ -38,13 +38,6 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /*__cplusplus*/
|
#endif /*__cplusplus*/
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VIPS_PRECISION_INTEGER,
|
|
||||||
VIPS_PRECISION_FLOAT,
|
|
||||||
VIPS_PRECISION_APPROXIMATE,
|
|
||||||
VIPS_PRECISION_LAST
|
|
||||||
} VipsPrecision;
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
VIPS_COMBINE_MAX,
|
VIPS_COMBINE_MAX,
|
||||||
VIPS_COMBINE_SUM,
|
VIPS_COMBINE_SUM,
|
||||||
|
@ -78,8 +78,6 @@ GType vips_pcs_get_type (void) G_GNUC_CONST;
|
|||||||
GType vips_operation_flags_get_type (void) G_GNUC_CONST;
|
GType vips_operation_flags_get_type (void) G_GNUC_CONST;
|
||||||
#define VIPS_TYPE_OPERATION_FLAGS (vips_operation_flags_get_type())
|
#define VIPS_TYPE_OPERATION_FLAGS (vips_operation_flags_get_type())
|
||||||
/* enumerations from "../../../libvips/include/vips/convolution.h" */
|
/* enumerations from "../../../libvips/include/vips/convolution.h" */
|
||||||
GType vips_precision_get_type (void) G_GNUC_CONST;
|
|
||||||
#define VIPS_TYPE_PRECISION (vips_precision_get_type())
|
|
||||||
GType vips_combine_get_type (void) G_GNUC_CONST;
|
GType vips_combine_get_type (void) G_GNUC_CONST;
|
||||||
#define VIPS_TYPE_COMBINE (vips_combine_get_type())
|
#define VIPS_TYPE_COMBINE (vips_combine_get_type())
|
||||||
/* enumerations from "../../../libvips/include/vips/morphology.h" */
|
/* enumerations from "../../../libvips/include/vips/morphology.h" */
|
||||||
@ -88,6 +86,9 @@ GType vips_operation_morphology_get_type (void) G_GNUC_CONST;
|
|||||||
/* enumerations from "../../../libvips/include/vips/draw.h" */
|
/* enumerations from "../../../libvips/include/vips/draw.h" */
|
||||||
GType vips_combine_mode_get_type (void) G_GNUC_CONST;
|
GType vips_combine_mode_get_type (void) G_GNUC_CONST;
|
||||||
#define VIPS_TYPE_COMBINE_MODE (vips_combine_mode_get_type())
|
#define VIPS_TYPE_COMBINE_MODE (vips_combine_mode_get_type())
|
||||||
|
/* enumerations from "../../../libvips/include/vips/basic.h" */
|
||||||
|
GType vips_precision_get_type (void) G_GNUC_CONST;
|
||||||
|
#define VIPS_TYPE_PRECISION (vips_precision_get_type())
|
||||||
/* enumerations from "../../../libvips/include/vips/object.h" */
|
/* enumerations from "../../../libvips/include/vips/object.h" */
|
||||||
GType vips_argument_flags_get_type (void) G_GNUC_CONST;
|
GType vips_argument_flags_get_type (void) G_GNUC_CONST;
|
||||||
#define VIPS_TYPE_ARGUMENT_FLAGS (vips_argument_flags_get_type())
|
#define VIPS_TYPE_ARGUMENT_FLAGS (vips_argument_flags_get_type())
|
||||||
|
@ -73,6 +73,7 @@ int vips_check_bands_1orn( const char *domain, VipsImage *im1, VipsImage *im2 );
|
|||||||
int vips_check_bands_1orn_unary( const char *domain, VipsImage *im, int n );
|
int vips_check_bands_1orn_unary( const char *domain, VipsImage *im, int n );
|
||||||
int vips_check_bands_same( const char *domain, VipsImage *im1, VipsImage *im2 );
|
int vips_check_bands_same( const char *domain, VipsImage *im1, VipsImage *im2 );
|
||||||
int vips_check_bandno( const char *domain, VipsImage *im, int bandno );
|
int vips_check_bandno( const char *domain, VipsImage *im, int bandno );
|
||||||
|
|
||||||
int vips_check_int( const char *domain, VipsImage *im );
|
int vips_check_int( const char *domain, VipsImage *im );
|
||||||
int vips_check_uint( const char *domain, VipsImage *im );
|
int vips_check_uint( const char *domain, VipsImage *im );
|
||||||
int vips_check_uintorf( const char *domain, VipsImage *im );
|
int vips_check_uintorf( const char *domain, VipsImage *im );
|
||||||
@ -91,6 +92,9 @@ int vips_check_hist( const char *domain, VipsImage *im );
|
|||||||
int vips_check_matrix( const char *domain, VipsImage *im, VipsImage **out );
|
int vips_check_matrix( const char *domain, VipsImage *im, VipsImage **out );
|
||||||
int vips_check_separable( const char *domain, VipsImage *im );
|
int vips_check_separable( const char *domain, VipsImage *im );
|
||||||
|
|
||||||
|
int vips_check_precision_intfloat( const char *domain,
|
||||||
|
VipsPrecision precision );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /*__cplusplus*/
|
#endif /*__cplusplus*/
|
||||||
|
@ -66,6 +66,7 @@ vips_scan_headers = \
|
|||||||
${top_srcdir}/libvips/include/vips/convolution.h \
|
${top_srcdir}/libvips/include/vips/convolution.h \
|
||||||
${top_srcdir}/libvips/include/vips/morphology.h \
|
${top_srcdir}/libvips/include/vips/morphology.h \
|
||||||
${top_srcdir}/libvips/include/vips/draw.h \
|
${top_srcdir}/libvips/include/vips/draw.h \
|
||||||
|
${top_srcdir}/libvips/include/vips/basic.h \
|
||||||
${top_srcdir}/libvips/include/vips/object.h
|
${top_srcdir}/libvips/include/vips/object.h
|
||||||
|
|
||||||
enumtypes.c: $(vips_scan_headers) Makefile
|
enumtypes.c: $(vips_scan_headers) Makefile
|
||||||
|
@ -674,25 +674,6 @@ vips_operation_flags_get_type( void )
|
|||||||
}
|
}
|
||||||
/* enumerations from "../../libvips/include/vips/convolution.h" */
|
/* enumerations from "../../libvips/include/vips/convolution.h" */
|
||||||
GType
|
GType
|
||||||
vips_precision_get_type( void )
|
|
||||||
{
|
|
||||||
static GType etype = 0;
|
|
||||||
|
|
||||||
if( etype == 0 ) {
|
|
||||||
static const GEnumValue values[] = {
|
|
||||||
{VIPS_PRECISION_INTEGER, "VIPS_PRECISION_INTEGER", "integer"},
|
|
||||||
{VIPS_PRECISION_FLOAT, "VIPS_PRECISION_FLOAT", "float"},
|
|
||||||
{VIPS_PRECISION_APPROXIMATE, "VIPS_PRECISION_APPROXIMATE", "approximate"},
|
|
||||||
{VIPS_PRECISION_LAST, "VIPS_PRECISION_LAST", "last"},
|
|
||||||
{0, NULL, NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
etype = g_enum_register_static( "VipsPrecision", values );
|
|
||||||
}
|
|
||||||
|
|
||||||
return( etype );
|
|
||||||
}
|
|
||||||
GType
|
|
||||||
vips_combine_get_type( void )
|
vips_combine_get_type( void )
|
||||||
{
|
{
|
||||||
static GType etype = 0;
|
static GType etype = 0;
|
||||||
@ -748,6 +729,26 @@ vips_combine_mode_get_type( void )
|
|||||||
|
|
||||||
return( etype );
|
return( etype );
|
||||||
}
|
}
|
||||||
|
/* enumerations from "../../libvips/include/vips/basic.h" */
|
||||||
|
GType
|
||||||
|
vips_precision_get_type( void )
|
||||||
|
{
|
||||||
|
static GType etype = 0;
|
||||||
|
|
||||||
|
if( etype == 0 ) {
|
||||||
|
static const GEnumValue values[] = {
|
||||||
|
{VIPS_PRECISION_INTEGER, "VIPS_PRECISION_INTEGER", "integer"},
|
||||||
|
{VIPS_PRECISION_FLOAT, "VIPS_PRECISION_FLOAT", "float"},
|
||||||
|
{VIPS_PRECISION_APPROXIMATE, "VIPS_PRECISION_APPROXIMATE", "approximate"},
|
||||||
|
{VIPS_PRECISION_LAST, "VIPS_PRECISION_LAST", "last"},
|
||||||
|
{0, NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
etype = g_enum_register_static( "VipsPrecision", values );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( etype );
|
||||||
|
}
|
||||||
/* enumerations from "../../libvips/include/vips/object.h" */
|
/* enumerations from "../../libvips/include/vips/object.h" */
|
||||||
GType
|
GType
|
||||||
vips_argument_flags_get_type( void )
|
vips_argument_flags_get_type( void )
|
||||||
|
@ -1317,3 +1317,29 @@ vips_check_separable( const char *domain, VipsImage *im )
|
|||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vips_check_precision_intfloat:
|
||||||
|
* @domain: the originating domain for the error message
|
||||||
|
* @precision: precision to check
|
||||||
|
*
|
||||||
|
* Check that @prec image is either float or int.
|
||||||
|
* If not, set an error message
|
||||||
|
* and return non-zero.
|
||||||
|
*
|
||||||
|
* See also: vips_error().
|
||||||
|
*
|
||||||
|
* Returns: 0 on OK, or -1 on error.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
vips_check_precision_intfloat( const char *domain, VipsPrecision precision )
|
||||||
|
{
|
||||||
|
if( precision != VIPS_PRECISION_INTEGER &&
|
||||||
|
precision != VIPS_PRECISION_FLOAT ) {
|
||||||
|
vips_error( domain,
|
||||||
|
"%s", _( "precision must be int or float" ) );
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user