Merge pull request #13 from bgilbert/openslide-stable-fixes

Improve OpenSlide argument parsing for 7.28 stable branch
This commit is contained in:
John Cupitt 2012-04-12 04:24:36 -07:00
commit 0b6058851f
4 changed files with 28 additions and 10 deletions

View File

@ -58,14 +58,21 @@ im_openslide2vips( const char *name, IMAGE *out )
char *p, *q;
char *associated;
int level;
char *endptr;
VipsImage *t;
im_filename_split( name, filename, mode );
level = 1;
level = 0;
associated = NULL;
p = &mode[0];
if( (q = im_getnextoption( &p )) )
level = atoi( q );
if( (q = im_getnextoption( &p )) ) {
level = strtoul( q, &endptr, 10 );
if( *endptr ) {
vips_error( "openslide2vips", "%s",
_( "level must be a number" ) );
return( -1 );
}
}
if( (q = im_getnextoption( &p )) )
associated = q;

View File

@ -29,6 +29,8 @@
* 9/4/12
* - move argb2rgba back in here, we don't have a use for coded pixels
* - small cleanups
* 11/4/12
* - fail if both level and associated image are specified
*/
/*
@ -149,6 +151,13 @@ readslide_new( const char *filename, VipsImage *out,
const char *background;
const char * const *properties;
if( level && associated ) {
vips_error( "openslide2vips",
"%s", _( "specify only one of level or associated "
"image" ) );
return( NULL );
}
rslide = VIPS_NEW( out, ReadSlide );
memset( rslide, 0, sizeof( *rslide ) );
g_signal_connect( out, "close", G_CALLBACK( readslide_destroy_cb ),

View File

@ -36,9 +36,9 @@ extern "C" {
int vips__openslide_isslide( const char *filename );
int vips__openslide_read_header( const char *filename, VipsImage *out,
int layer, char *associated );
int level, char *associated );
int vips__openslide_read( const char *filename, VipsImage *out,
int layer );
int level );
int vips__openslide_read_associated( const char *filename, VipsImage *out,
const char *associated );

View File

@ -4,6 +4,8 @@
* - from openslideload.c
* 28/2/12
* - convert "layer" to "level" where externally visible
* 11/4/12
* - convert remaining uses of "layer" to "level"
*/
/*
@ -60,9 +62,9 @@ typedef struct _VipsForeignLoadOpenslide {
*/
char *filename;
/* Load this layer.
/* Load this level.
*/
int layer;
int level;
/* Load this associated image.
*/
@ -103,7 +105,7 @@ vips_foreign_load_openslide_header( VipsForeignLoad *load )
VipsForeignLoadOpenslide *openslide = (VipsForeignLoadOpenslide *) load;
if( vips__openslide_read_header( openslide->filename, load->out,
openslide->layer, openslide->associated ) )
openslide->level, openslide->associated ) )
return( -1 );
return( 0 );
@ -116,7 +118,7 @@ vips_foreign_load_openslide_load( VipsForeignLoad *load )
if( !openslide->associated ) {
if( vips__openslide_read( openslide->filename, load->real,
openslide->layer ) )
openslide->level ) )
return( -1 );
}
else {
@ -183,7 +185,7 @@ vips_foreign_load_openslide_class_init( VipsForeignLoadOpenslideClass *class )
_( "Level" ),
_( "Load this level from the file" ),
VIPS_ARGUMENT_OPTIONAL_INPUT,
G_STRUCT_OFFSET( VipsForeignLoadOpenslide, layer ),
G_STRUCT_OFFSET( VipsForeignLoadOpenslide, level ),
0, 100000, 0 );
VIPS_ARG_STRING( class, "associated", 11,