From 6031b40b8d6796a22760415d4fbfe8330f640f04 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Thu, 13 Jun 2013 17:37:24 +0100 Subject: [PATCH] move im_zone*() over to a class --- ChangeLog | 2 +- TODO | 6 +- libvips/create/Makefile.am | 3 +- libvips/create/im_zone.c | 135 ----------------------------- libvips/deprecated/vips7compat.c | 34 ++++++++ libvips/include/vips/create.h | 2 - libvips/include/vips/vips7compat.h | 22 ++--- 7 files changed, 51 insertions(+), 153 deletions(-) delete mode 100644 libvips/create/im_zone.c diff --git a/ChangeLog b/ChangeLog index 7c04c5a5..e72644f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,7 +4,7 @@ - fix no-pango build - add im_vips2dz(): run the deepzoom writer from vips7 - vips_magickload() has an option to read all images in a sequence -- redo im_make_xy(), im_*eye() as classes +- redo im_make_xy(), im_*eye(), im_zone*() as classes 12/3/13 started 7.33.0 - vipsthumbnail lets you specify the sharpening mask diff --git a/TODO b/TODO index 37a8f14e..0ede90ce 100644 --- a/TODO +++ b/TODO @@ -1,8 +1,8 @@ -- move im_make_xy() to deprecated, add something to make higher-dimension - images too +- the rest of "create" can be classed quickly + + - use in heart analysis - look at diff --git a/libvips/create/Makefile.am b/libvips/create/Makefile.am index 66e0a832..37248256 100644 --- a/libvips/create/Makefile.am +++ b/libvips/create/Makefile.am @@ -4,14 +4,13 @@ libcreate_la_SOURCES = \ create.c \ eye.c \ grey.c \ - zone.c \ xyz.c \ black.c \ text.c \ gaussnoise.c \ im_benchmark.c \ im_sines.c \ - im_zone.c \ + zone.c \ other_dispatch.c AM_CPPFLAGS = -I${top_srcdir}/libvips/include @VIPS_CFLAGS@ @VIPS_INCLUDES@ diff --git a/libvips/create/im_zone.c b/libvips/create/im_zone.c deleted file mode 100644 index 4008db2e..00000000 --- a/libvips/create/im_zone.c +++ /dev/null @@ -1,135 +0,0 @@ -/* square zone plate of size - * - * N. Dessipris 01/02/1991 - * - * 22/7/93 JC - * - externs removed - * - im_outcheck() added - * 30/8/95 JC - * - modernized - * - memory leaks fixed - * - split into im_zone() and im_fzone() - * 1/2/11 - * - gtk-doc - */ - -/* - - This file is part of VIPS. - - VIPS is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301 USA - - */ - -/* - - These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk - - */ - -#ifdef HAVE_CONFIG_H -#include -#endif /*HAVE_CONFIG_H*/ -#include - -#include -#include -#include - -#include - -/** - * im_fzone: - * @out: output image - * @size: image size - * - * Create a one-band float image of size @size by @size pixels of a zone - * plate. Pixels are in [-1, +1]. - * - * See also: im_grey(), im_make_xy(), im_identity(). - * - * Returns: 0 on success, -1 on error - */ -int -im_fzone( IMAGE *out, int size ) -{ - int x, y; - int i, j; - - float *buf; - const int size2 = size/2; - - /* Check args. - */ - if( im_outcheck( out ) ) - return( -1 ); - if( size <= 0 || (size % 2) != 0 ) { - im_error( "im_zone", "%s", - _( "size must be even and positive" ) ); - return( -1 ); - } - - /* Set up output out. - */ - im_initdesc( out, size, size, 1, IM_BBITS_FLOAT, IM_BANDFMT_FLOAT, - IM_CODING_NONE, IM_TYPE_B_W, 1.0, 1.0, 0, 0 ); - if( im_setupout( out ) ) - return( -1 ); - - /* Create output buffer. - */ - if( !(buf = IM_ARRAY( out, size, float )) ) - return( -1 ); - - /* Make zone plate. - */ - for( y = 0, j = -size2; j < size2; j++, y++ ) { - for( x = 0, i = -size2; i < size2; i++, x++ ) - buf[x] = cos( (IM_PI / size) * (i * i + j * j) ); - if( im_writeline( y, out, (PEL *) buf ) ) - return( -1 ); - } - - return( 0 ); -} - -/** - * im_zone: - * @out: output image - * @size: image size - * - * Create a one-band uchar image of size @size by @size pixels of a zone - * plate. Pixels are in [0, 255]. - * - * See also: im_grey(), im_make_xy(), im_identity(). - * - * Returns: 0 on success, -1 on error - */ -int -im_zone( IMAGE *out, int size ) -{ - IMAGE *t[2]; - - /* Change range to [0,255]. - */ - if( im_open_local_array( out, t, 2, "im_grey", "p" ) || - im_fzone( t[0], size ) || - im_lintra( 127.5, t[0], 127.5, t[1] ) || - im_clip2fmt( t[1], out, IM_BANDFMT_UCHAR ) ) - return( -1 ); - - return( 0 ); -} diff --git a/libvips/deprecated/vips7compat.c b/libvips/deprecated/vips7compat.c index 2b37eae5..db55be9b 100644 --- a/libvips/deprecated/vips7compat.c +++ b/libvips/deprecated/vips7compat.c @@ -1575,6 +1575,40 @@ im_make_xy( IMAGE *out, const int xsize, const int ysize ) return( 0 ); } +int +im_zone( IMAGE *out, int size ) +{ + VipsImage *t; + + if( vips_zone( &t, size, size, + "uchar", TRUE, + NULL ) ) + return( -1 ); + if( vips_image_write( t, out ) ) { + g_object_unref( t ); + return( -1 ); + } + g_object_unref( t ); + + return( 0 ); +} + +int +im_fzone( IMAGE *out, int size ) +{ + VipsImage *t; + + if( vips_zone( &t, size, size, NULL ) ) + return( -1 ); + if( vips_image_write( t, out ) ) { + g_object_unref( t ); + return( -1 ); + } + g_object_unref( t ); + + return( 0 ); +} + int im_text( IMAGE *out, const char *text, const char *font, int width, int align, int dpi ) diff --git a/libvips/include/vips/create.h b/libvips/include/vips/create.h index e229d1a7..83c34dec 100644 --- a/libvips/include/vips/create.h +++ b/libvips/include/vips/create.h @@ -60,8 +60,6 @@ int vips_zone( VipsImage **out, int width, int height, ... ) -int im_zone( VipsImage *out, int size ); -int im_fzone( VipsImage *out, int size ); int im_sines( VipsImage *out, int xsize, int ysize, double horfreq, double verfreq ); diff --git a/libvips/include/vips/vips7compat.h b/libvips/include/vips/vips7compat.h index 42694271..f6a48dc1 100644 --- a/libvips/include/vips/vips7compat.h +++ b/libvips/include/vips/vips7compat.h @@ -710,9 +710,6 @@ int im_rotquad( VipsImage *in, VipsImage *out ); int im_clip2fmt( VipsImage *in, VipsImage *out, VipsBandFormat fmt ); int im_bandjoin( VipsImage *in1, VipsImage *in2, VipsImage *out ); int im_gbandjoin( VipsImage **in, VipsImage *out, int n ); -int im_black( VipsImage *out, int x, int y, int bands ); -int im_make_xy( VipsImage *out, const int xsize, const int ysize ); -int im_gaussnoise( VipsImage *out, int x, int y, double mean, double sigma ); int im_grid( VipsImage *in, VipsImage *out, int tile_height, int across, int down ); int im_scale( VipsImage *in, VipsImage *out ); int im_scaleps( VipsImage *in, VipsImage *out ); @@ -720,8 +717,20 @@ int im_msb( VipsImage *in, VipsImage *out ); int im_msb_band( VipsImage *in, VipsImage *out, int band ); int im_zoom( VipsImage *in, VipsImage *out, int xfac, int yfac ); int im_subsample( VipsImage *in, VipsImage *out, int xshrink, int yshrink ); + +int im_gaussnoise( VipsImage *out, int x, int y, double mean, double sigma ); int im_text( VipsImage *out, const char *text, const char *font, int width, int alignment, int dpi ); +int im_black( VipsImage *out, int x, int y, int bands ); +int im_make_xy( VipsImage *out, const int xsize, const int ysize ); +int im_zone( VipsImage *out, int size ); +int im_fzone( VipsImage *out, int size ); +int im_feye( VipsImage *out, + const int xsize, const int ysize, const double factor ); +int im_eye( VipsImage *out, + const int xsize, const int ysize, const double factor ); +int im_grey( VipsImage *out, const int xsize, const int ysize ); +int im_fgrey( VipsImage *out, const int xsize, const int ysize ); int im_system( VipsImage *im, const char *cmd, char **out ); VipsImage *im_system_image( VipsImage *im, @@ -741,13 +750,6 @@ int im_rot270( VipsImage *in, VipsImage *out ); int im_ifthenelse( VipsImage *c, VipsImage *a, VipsImage *b, VipsImage *out ); int im_blend( VipsImage *c, VipsImage *a, VipsImage *b, VipsImage *out ); -int im_feye( VipsImage *out, - const int xsize, const int ysize, const double factor ); -int im_eye( VipsImage *out, - const int xsize, const int ysize, const double factor ); -int im_grey( VipsImage *out, const int xsize, const int ysize ); -int im_fgrey( VipsImage *out, const int xsize, const int ysize ); - DOUBLEMASK *im_vips2mask( VipsImage *in, const char *filename ); int im_mask2vips( DOUBLEMASK *in, VipsImage *out );