start fits write
not done yet, argh
This commit is contained in:
parent
f4c6da50e1
commit
5a64a02cb7
@ -529,6 +529,148 @@ isfits( const char *filename )
|
|||||||
return( 1 );
|
return( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VipsFits *
|
||||||
|
vips_fits_new_write( VipsImage *in, const char *filename )
|
||||||
|
{
|
||||||
|
VipsFits *fits;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
if( !(fits = VIPS_NEW( NULL, VipsFits )) )
|
||||||
|
return( NULL );
|
||||||
|
|
||||||
|
fits->filename = im_strdup( NULL, filename );
|
||||||
|
fits->image = in;
|
||||||
|
fits->fptr = NULL;
|
||||||
|
fits->lock = NULL;
|
||||||
|
fits->band_select = -1;
|
||||||
|
g_signal_connect( in, "close",
|
||||||
|
G_CALLBACK( vips_fits_destroy ), fits );
|
||||||
|
|
||||||
|
status = 0;
|
||||||
|
if( fits_create_file( &fits->fptr, filename, &status ) ) {
|
||||||
|
im_error( "fits", _( "unable to write to \"%s\"" ), filename );
|
||||||
|
vips_fits_error( status );
|
||||||
|
return( NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
fits->lock = g_mutex_new();
|
||||||
|
|
||||||
|
return( fits );
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
vips_fits_set_header( VipsFits *fits, VipsImage *in )
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
int bitpix;
|
||||||
|
long int naxes[MAX_DIMENSIONS];
|
||||||
|
|
||||||
|
/*
|
||||||
|
int width, height, bands, format, type;
|
||||||
|
int keysexist;
|
||||||
|
int morekeys;
|
||||||
|
*/
|
||||||
|
|
||||||
|
int i;
|
||||||
|
|
||||||
|
status = 0;
|
||||||
|
|
||||||
|
fits->naxis = 3;
|
||||||
|
fits->naxes[2] = naxes[2] = in->Bands;
|
||||||
|
fits->naxes[1] = naxes[1] = in->Ysize;
|
||||||
|
fits->naxes[0] = naxes[0] = in->Xsize;
|
||||||
|
|
||||||
|
for( i = 0; i < VIPS_NUMBER( fits2vips_formats ); i++ )
|
||||||
|
if( fits2vips_formats[i][1] == in->BandFmt )
|
||||||
|
break;
|
||||||
|
if( i == VIPS_NUMBER( fits2vips_formats ) ) {
|
||||||
|
im_error( "fits", _( "unsupported BandFmt %d\n" ),
|
||||||
|
in->BandFmt );
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
bitpix = fits2vips_formats[i][0];
|
||||||
|
fits->datatype = fits2vips_formats[i][2];
|
||||||
|
|
||||||
|
#ifdef VIPS_DEBUG
|
||||||
|
VIPS_DEBUG_MSG( "naxis = %d\n", fits->naxis );
|
||||||
|
for( i = 0; i < fits->naxis; i++ )
|
||||||
|
VIPS_DEBUG_MSG( "%d) %lld\n", i, fits->naxes[i] );
|
||||||
|
VIPS_DEBUG_MSG( "bitpix = %d\n", bitpix );
|
||||||
|
#endif /*VIPS_DEBUG*/
|
||||||
|
|
||||||
|
if( fits_create_img( fits->fptr, bitpix, fits->naxis,
|
||||||
|
naxes, &status ) ) {
|
||||||
|
vips_fits_error( status );
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read all keys into meta.
|
||||||
|
if( fits_get_hdrspace( fits->fptr, &keysexist, &morekeys, &status ) ) {
|
||||||
|
vips_fits_error( status );
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( i = 0; i < keysexist; i++ ) {
|
||||||
|
char key[81];
|
||||||
|
char value[81];
|
||||||
|
char comment[81];
|
||||||
|
char vipsname[100];
|
||||||
|
|
||||||
|
if( fits_read_keyn( fits->fptr, i + 1,
|
||||||
|
key, value, comment, &status ) ) {
|
||||||
|
vips_fits_error( status );
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
VIPS_DEBUG_MSG( "fits: seen:\n" );
|
||||||
|
VIPS_DEBUG_MSG( " key == %s\n", key );
|
||||||
|
VIPS_DEBUG_MSG( " value == %s\n", value );
|
||||||
|
VIPS_DEBUG_MSG( " comment == %s\n", comment );
|
||||||
|
|
||||||
|
im_snprintf( vipsname, 100, "fits-%s", key );
|
||||||
|
if( im_meta_set_string( out, vipsname, value ) )
|
||||||
|
return( -1 );
|
||||||
|
im_snprintf( vipsname, 100, "fits-%s-comment", key );
|
||||||
|
if( im_meta_set_string( out, vipsname, comment ) )
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
vips_fits_write( VipsFits *fits, VipsImage *in )
|
||||||
|
{
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* im_vips2fits:
|
||||||
|
* @in: image to write
|
||||||
|
* @filename: file to write to
|
||||||
|
*
|
||||||
|
* Write @in to @filename in FITS format.
|
||||||
|
*
|
||||||
|
* See also: #VipsFormat.
|
||||||
|
*
|
||||||
|
* Returns: 0 on success, -1 on error.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
im_vips2fits( VipsImage *in, const char *filename )
|
||||||
|
{
|
||||||
|
VipsFits *fits;
|
||||||
|
|
||||||
|
VIPS_DEBUG_MSG( "im_vips2fits: writing \"%s\"\n", filename );
|
||||||
|
|
||||||
|
if( !(fits = vips_fits_new_write( in, filename )) ||
|
||||||
|
vips_fits_set_header( fits, in ) ||
|
||||||
|
vips_fits_write( fits, in ) )
|
||||||
|
return( -1 );
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
static const char *fits_suffs[] = { ".fits", NULL };
|
static const char *fits_suffs[] = { ".fits", NULL };
|
||||||
|
|
||||||
/* fits format adds no new members.
|
/* fits format adds no new members.
|
||||||
@ -548,7 +690,7 @@ vips_format_fits_class_init( VipsFormatFitsClass *class )
|
|||||||
format_class->is_a = isfits;
|
format_class->is_a = isfits;
|
||||||
format_class->header = fits2vips_header;
|
format_class->header = fits2vips_header;
|
||||||
format_class->load = im_fits2vips;
|
format_class->load = im_fits2vips;
|
||||||
format_class->save = NULL;
|
format_class->save = im_vips2fits;
|
||||||
format_class->suffs = fits_suffs;
|
format_class->suffs = fits_suffs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,6 +159,7 @@ int im_rad2vips( const char *filename, VipsImage *out );
|
|||||||
int im_vips2rad( VipsImage *in, const char *filename );
|
int im_vips2rad( VipsImage *in, const char *filename );
|
||||||
|
|
||||||
int im_fits2vips( const char *filename, VipsImage *out );
|
int im_fits2vips( const char *filename, VipsImage *out );
|
||||||
|
int im_vips2fits( VipsImage *in, const char *filename );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user