From e52d2c9f7f952ec549439fbd70b085b0b8a84f25 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Fri, 6 Oct 2017 16:56:20 +0100 Subject: [PATCH] add composite shortcut to cpp two composite just two images --- cplusplus/VImage.cpp | 35 ++++++++++++++++++++++++++++++++ cplusplus/include/vips/VImage8.h | 4 ++++ 2 files changed, 39 insertions(+) diff --git a/cplusplus/VImage.cpp b/cplusplus/VImage.cpp index e04be4fa..da1eef17 100644 --- a/cplusplus/VImage.cpp +++ b/cplusplus/VImage.cpp @@ -205,6 +205,30 @@ VOption::set( const char *name, std::vector value ) return( this ); } +// input int array +VOption * +VOption::set( const char *name, std::vector value ) +{ + Pair *pair = new Pair( name ); + + int *array; + unsigned int i; + + pair->input = true; + + g_value_init( &pair->value, VIPS_TYPE_ARRAY_INT ); + vips_value_set_array_int( &pair->value, NULL, + static_cast< int >( value.size() ) ); + array = vips_value_get_array_int( &pair->value, NULL ); + + for( i = 0; i < value.size(); i++ ) + array[i] = value[i]; + + options.push_back( pair ); + + return( this ); +} + // input image array VOption * VOption::set( const char *name, std::vector value ) @@ -670,6 +694,17 @@ VImage::bandjoin( VImage other, VOption *options ) return( bandjoin( vec, options ) ); } +VImage +VImage::composite( VImage other, VipsBlendMode mode, VOption *options ) +{ + VImage v[2] = { *this, other }; + std::vector ivec( v, v + VIPS_NUMBER( v ) ); + int m[1] = { static_cast( mode ) }; + std::vector mvec( m, m + VIPS_NUMBER( m ) ); + + return( composite( ivec, mvec, options ) ); +} + std::complex VImage::minpos( VOption *options ) { diff --git a/cplusplus/include/vips/VImage8.h b/cplusplus/include/vips/VImage8.h index be30f09e..578504cc 100644 --- a/cplusplus/include/vips/VImage8.h +++ b/cplusplus/include/vips/VImage8.h @@ -219,6 +219,7 @@ public: VOption *set( const char *name, VInterpolate value ); VOption *set( const char *name, std::vector value ); VOption *set( const char *name, std::vector value ); + VOption *set( const char *name, std::vector value ); VOption *set( const char *name, VipsBlob *value ); VOption *set( const char *name, bool *value ); @@ -541,6 +542,9 @@ public: return( bandjoin_const( other, options ) ); } + VImage composite( VImage other, VipsBlendMode mode, + VOption *options = 0 ); + std::complex minpos( VOption *options = 0 ); std::complex maxpos( VOption *options = 0 );