diff --git a/cplusplus/VError.cpp b/cplusplus/VError.cpp index 67e67348..a3d82188 100644 --- a/cplusplus/VError.cpp +++ b/cplusplus/VError.cpp @@ -32,8 +32,6 @@ #endif /*HAVE_CONFIG_H*/ #include -#include - #include VIPS_NAMESPACE_START diff --git a/cplusplus/VImage.cpp b/cplusplus/VImage.cpp index 3c1acd98..205b46cb 100644 --- a/cplusplus/VImage.cpp +++ b/cplusplus/VImage.cpp @@ -563,7 +563,7 @@ VImage::new_from_file( const char *name, VOption *options ) } VImage -VImage::new_from_buffer( void *buf, size_t len, const char *option_string, +VImage::new_from_buffer( const void *buf, size_t len, const char *option_string, VOption *options ) { const char *operation_name; @@ -588,6 +588,13 @@ VImage::new_from_buffer( void *buf, size_t len, const char *option_string, return( out ); } +VImage +VImage::new_from_buffer( const std::string &buf, const char *option_string, + VOption *options ) +{ + return( new_from_buffer( buf.c_str(), buf.size(), option_string, options ) ); +} + VImage VImage::new_matrix( int width, int height ) { diff --git a/cplusplus/include/vips/VError8.h b/cplusplus/include/vips/VError8.h index 627222c1..29f3e9fb 100644 --- a/cplusplus/include/vips/VError8.h +++ b/cplusplus/include/vips/VError8.h @@ -31,8 +31,8 @@ #ifndef VIPS_VERROR_H #define VIPS_VERROR_H -#include -#include +#include +#include #include #include @@ -43,7 +43,7 @@ class VIPS_CPLUSPLUS_API VError : public std::exception { std::string _what; public: - VError( std::string what ) : _what( what ) {} + VError( const std::string &what ) : _what( what ) {} VError() : _what( vips_error_buffer() ) {} virtual ~VError() throw() {} diff --git a/cplusplus/include/vips/VImage8.h b/cplusplus/include/vips/VImage8.h index 05ae1a2e..abd0b78a 100644 --- a/cplusplus/include/vips/VImage8.h +++ b/cplusplus/include/vips/VImage8.h @@ -34,7 +34,7 @@ #include #include -#include +#include #include @@ -327,6 +327,12 @@ public: return( vips_image_get_yoffset( get_image() ) ); } + bool + has_alpha() const + { + return( vips_image_hasalpha( get_image() ) ); + } + const char * filename() const { @@ -416,6 +422,12 @@ public: return( value ); } + bool + remove( const char *name ) const + { + return( vips_image_remove( get_image(), name ) ); + } + static VOption * option() { @@ -458,7 +470,10 @@ public: return( VImage( image ) ); } - static VImage new_from_buffer( void *buf, size_t len, + static VImage new_from_buffer( const void *buf, size_t len, + const char *option_string, VOption *options = 0 ); + + static VImage new_from_buffer( const std::string &buf, const char *option_string, VOption *options = 0 ); static VImage new_matrix( int width, int height ); @@ -495,6 +510,17 @@ public: return( new_from_image( to_vectorv( 1, pixel ) ) ); } + VImage + copy_memory() const + { + VipsImage *image; + + if( !(image = vips_image_copy_memory( this->get_image() )) ) + throw( VError() ); + + return( VImage( image ) ); + } + VImage write( VImage out ) const; void write_to_file( const char *name, VOption *options = 0 ) const; diff --git a/cplusplus/include/vips/VInterpolate8.h b/cplusplus/include/vips/VInterpolate8.h index 606a696a..8ef6f99e 100644 --- a/cplusplus/include/vips/VInterpolate8.h +++ b/cplusplus/include/vips/VInterpolate8.h @@ -34,7 +34,7 @@ #include #include -#include +#include #include diff --git a/libvips/conversion/cast.c b/libvips/conversion/cast.c index abdc8327..26fa7be4 100644 --- a/libvips/conversion/cast.c +++ b/libvips/conversion/cast.c @@ -194,11 +194,8 @@ G_DEFINE_TYPE( VipsCast, vips_cast, VIPS_TYPE_CONVERSION ); ITYPE * restrict p = (ITYPE *) in; \ OTYPE * restrict q = (OTYPE *) out; \ \ - for( x = 0; x < sz; x++ ) { \ - TEMP v = VIPS_FLOOR( p[x] ); \ - \ - q[x] = CAST( v ); \ - } \ + for( x = 0; x < sz; x++ ) \ + q[x] = CAST( p[x] ); \ } /* Cast complex types to an int type. Just take the real part. @@ -208,10 +205,8 @@ G_DEFINE_TYPE( VipsCast, vips_cast, VIPS_TYPE_CONVERSION ); OTYPE * restrict q = (OTYPE *) out; \ \ for( x = 0; x < sz; x++ ) { \ - TEMP v = VIPS_FLOOR( p[0] ); \ - \ + q[x] = CAST( p[0] ); \ p += 2; \ - q[x] = CAST( v ); \ } \ }