diff --git a/libvips/deprecated/Makefile.am b/libvips/deprecated/Makefile.am index bbc93424..524e060e 100644 --- a/libvips/deprecated/Makefile.am +++ b/libvips/deprecated/Makefile.am @@ -11,6 +11,7 @@ libdeprecated_la_SOURCES = \ im_point_bilinear.c \ resample_dispatch.c \ im_openslide2vips.c \ + im_nifti2vips.c \ im_lab_morph.c \ deprecated_dispatch.c \ mosaicing_dispatch.c \ diff --git a/libvips/deprecated/format.c b/libvips/deprecated/format.c index edeb25d5..03ea8fd1 100644 --- a/libvips/deprecated/format.c +++ b/libvips/deprecated/format.c @@ -307,6 +307,8 @@ im__format_init( void ) #endif /*HAVE_TIFF*/ extern GType vips_format_openslide_get_type( void ); vips_format_openslide_get_type(); + extern GType vips_format_nifti_get_type( void ); + vips_format_nifti_get_type(); } /* Can this format open this file? diff --git a/libvips/deprecated/im_nifti2vips.c b/libvips/deprecated/im_nifti2vips.c new file mode 100644 index 00000000..cec34237 --- /dev/null +++ b/libvips/deprecated/im_nifti2vips.c @@ -0,0 +1,127 @@ +/* load nifti images + * + * 10/9/18 + * - from im_openslide2vips + */ + +/* + + 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 + + */ + +/* +#define DEBUG + */ + +#ifdef HAVE_CONFIG_H +#include +#endif /*HAVE_CONFIG_H*/ +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +static int +im_nifti2vips( const char *name, IMAGE *out ) +{ + VipsImage *t; + + if( vips_niftiload( name, &t, NULL ) ) + return( -1 ); + if( vips_image_write( t, out ) ) { + g_object_unref( t ); + return( -1 ); + } + g_object_unref( t ); + + return( 0 ); +} + +static const char *nifti_suffs[] = { + ".nii", ".nii.gz", + ".hdr", ".hdr.gz", + ".img", ".img.gz", + ".nia", ".nia.gz", + NULL +}; + +static VipsFormatFlags +nifti_flags( const char *name ) +{ + char filename[FILENAME_MAX]; + char mode[FILENAME_MAX]; + + im_filename_split( name, filename, mode ); + + return( (VipsFormatFlags) + vips_foreign_flags( "niftiload", filename ) ); +} + +static int +isnifti( const char *name ) +{ + char filename[FILENAME_MAX]; + char mode[FILENAME_MAX]; + + im_filename_split( name, filename, mode ); + + return( vips_foreign_is_a( "niftiload", filename ) ); +} + +/* nifti format adds no new members. + */ +typedef VipsFormat VipsFormatNifti; +typedef VipsFormatClass VipsFormatNiftiClass; + +static void +vips_format_nifti_class_init( VipsFormatNiftiClass *class ) +{ + VipsObjectClass *object_class = (VipsObjectClass *) class; + VipsFormatClass *format_class = (VipsFormatClass *) class; + + object_class->nickname = "im_nifti"; + object_class->description = _( "NIfTI" ); + + format_class->priority = 100; + format_class->is_a = isnifti; + format_class->load = im_nifti2vips; + format_class->get_flags = nifti_flags; + format_class->suffs = nifti_suffs; +} + +static void +vips_format_nifti_init( VipsFormatNifti *object ) +{ +} + +G_DEFINE_TYPE( VipsFormatNifti, vips_format_nifti, VIPS_TYPE_FORMAT ); +