/** * im_fits2vips: * @filename: file to load * @out: image to write to * * Read a FITS image file into a VIPS image. * * See also: im_vips2fits(), #VipsFormat. * * Returns: 0 on success, -1 on error. */ int im_fits2vips( const char *filename, VipsImage *out ) { VipsImage *t; int n_bands; VIPS_DEBUG_MSG( "im_fits2vips: reading \"%s\"\n", filename ); /* fits is naturally a band-separated format. For single-band images, * we can just read out. For many bands, we read each band out * separately then join them. */ if( !(t = vips_image_new()) || vips_object_local( out, t ) || fits2vips_header( filename, t ) ) return( -1 ); n_bands = t->Bands; if( n_bands == 1 ) { if( !(t = vips_image_new()) || vips_object_local( out, t ) || fits2vips( filename, t, 0 ) ) return( -1 ); } else { VipsImage *acc; int i; acc = NULL; for( i = 0; i < n_bands; i++ ) { if( !(t = vips_image_new()) || vips_object_local( out, t ) || fits2vips( filename, t, i ) ) return( -1 ); if( !acc ) acc = t; else { VipsImage *t2; if( !(t2 = vips_image_new()) || vips_object_local( out, t2 ) || im_bandjoin( acc, t, t2 ) ) return( -1 ); acc = t2; } } t = acc; } /* fits has inverted y. */ if( im_flipver( t, out ) ) return( -1 ); return( 0 ); }
int vips__fits_read( const char *filename, VipsImage *out ) { VipsImage *t; int n_bands; VIPS_DEBUG_MSG( "fits2vips: reading \"%s\"\n", filename ); /* fits is naturally a band-separated format. For single-band images * we can just read out. For many bands we read each band out * separately then join them. */ t = vips_image_new(); if( vips__fits_read_header( filename, t ) ) { g_object_unref( t ); return( -1 ); } n_bands = t->Bands; g_object_unref( t ); if( n_bands == 1 ) { if( fits2vips( filename, out, 0 ) ) return( -1 ); } else { VipsImage **x; int i; t = vips_image_new(); x = (VipsImage **) vips_object_local_array( VIPS_OBJECT( t ), n_bands + 1 ); for( i = 0; i < n_bands; i++ ) { x[i] = vips_image_new(); if( fits2vips( filename, x[i], i ) ) { g_object_unref( t ); return( -1 ); } } if( vips_bandjoin( x, &x[n_bands], n_bands, NULL ) || vips_image_write( x[n_bands], out ) ) { g_object_unref( t ); return( -1 ); } g_object_unref( t ); } return( 0 ); }