magicksave polishing
- make better use of the magick.c wrappers in magickload - disable magicksave if ImportImagePixels() is not found, fixing build against GM
This commit is contained in:
parent
e2aafa6ed3
commit
c349b31c5f
15
configure.ac
15
configure.ac
@ -744,6 +744,21 @@ AC_ARG_ENABLE([magicksave],
|
|||||||
AS_HELP_STRING([--disable-magicksave],
|
AS_HELP_STRING([--disable-magicksave],
|
||||||
[disable libMagic save (default: enabled)]))
|
[disable libMagic save (default: enabled)]))
|
||||||
|
|
||||||
|
if test x"$enable_magicksave" != x"yes"; then
|
||||||
|
# we need ImportImagePixels ... GM is missing this sadly
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
LIBS="$LIBS $MAGICK_LIBS"
|
||||||
|
AC_CHECK_FUNCS(ImportImagePixels,[
|
||||||
|
AC_DEFINE(HAVE_IMPORTIMAGEPIXELS,1,
|
||||||
|
[define if you have ImportImagePixels.])
|
||||||
|
],[
|
||||||
|
AC_MSG_WARN([ImportImagePixels not found; disabling magicksave])
|
||||||
|
enable_magicksave=no
|
||||||
|
]
|
||||||
|
)
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
fi
|
||||||
|
|
||||||
if test x"$with_magick" != x"no"; then
|
if test x"$with_magick" != x"no"; then
|
||||||
if test x"$enable_magickload" != x"no"; then
|
if test x"$enable_magickload" != x"no"; then
|
||||||
AC_DEFINE(ENABLE_MAGICKLOAD,1,[define to enable load with libMagick])
|
AC_DEFINE(ENABLE_MAGICKLOAD,1,[define to enable load with libMagick])
|
||||||
|
@ -97,6 +97,7 @@ Image*
|
|||||||
magick_acquire_image( const ImageInfo *image_info, ExceptionInfo *exception )
|
magick_acquire_image( const ImageInfo *image_info, ExceptionInfo *exception )
|
||||||
{
|
{
|
||||||
(void) exception;
|
(void) exception;
|
||||||
|
|
||||||
#ifdef HAVE_ACQUIREIMAGE
|
#ifdef HAVE_ACQUIREIMAGE
|
||||||
return( AcquireImage( image_info ) );
|
return( AcquireImage( image_info ) );
|
||||||
#else /*!HAVE_ACQUIREIMAGE*/
|
#else /*!HAVE_ACQUIREIMAGE*/
|
||||||
@ -157,8 +158,12 @@ magick_import_pixels( Image *image, const ssize_t x, const ssize_t y,
|
|||||||
*
|
*
|
||||||
* then repack pixels into that area using map and storage_type.
|
* then repack pixels into that area using map and storage_type.
|
||||||
*/
|
*/
|
||||||
|
#ifdef HAVE_IMPORTIMAGEPIXELS
|
||||||
return( ImportImagePixels( image, x, y, width, height, map,
|
return( ImportImagePixels( image, x, y, width, height, map,
|
||||||
type, pixels ) );
|
type, pixels ) );
|
||||||
|
#else /*!HAVE_IMPORTIMAGEPIXELS*/
|
||||||
|
return( MagickFalse );
|
||||||
|
#endif /*HAVE_IMPORTIMAGEPIXELS*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -185,6 +190,38 @@ magick_inherit_exception( ExceptionInfo *exception, Image *image )
|
|||||||
|
|
||||||
#if defined(HAVE_MAGICK6) || defined(HAVE_MAGICK7)
|
#if defined(HAVE_MAGICK6) || defined(HAVE_MAGICK7)
|
||||||
|
|
||||||
|
void
|
||||||
|
magick_set_image_option( ImageInfo *image_info,
|
||||||
|
const char *name, const char *value )
|
||||||
|
{
|
||||||
|
#ifdef HAVE_SETIMAGEOPTION
|
||||||
|
SetImageOption( image_info, name, value );
|
||||||
|
#endif /*HAVE_SETIMAGEOPTION*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
magick_set_number_scenes( ImageInfo *image_info, int scene, int number_scenes )
|
||||||
|
{
|
||||||
|
#ifdef HAVE_NUMBER_SCENES
|
||||||
|
/* I can't find docs for these fields, but this seems to work.
|
||||||
|
*/
|
||||||
|
char page[256];
|
||||||
|
|
||||||
|
image_info->scene = scene;
|
||||||
|
image_info->number_scenes = number_scenes;
|
||||||
|
|
||||||
|
/* Some IMs must have the string version set as well.
|
||||||
|
*/
|
||||||
|
vips_snprintf( page, 256, "%d-%d", scene, scene + number_scenes );
|
||||||
|
image_info->scenes = strdup( page );
|
||||||
|
#else /*!HAVE_NUMBER_SCENES*/
|
||||||
|
/* This works with GM 1.2.31 and probably others.
|
||||||
|
*/
|
||||||
|
image_info->subimage = scene;
|
||||||
|
image_info->subrange = number_scenes;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
magick_vips_error( const char *domain, ExceptionInfo *exception )
|
magick_vips_error( const char *domain, ExceptionInfo *exception )
|
||||||
{
|
{
|
||||||
|
@ -53,6 +53,10 @@ int magick_import_pixels( Image *image, const ssize_t x, const ssize_t y,
|
|||||||
const StorageType type,const void *pixels, ExceptionInfo *exception );
|
const StorageType type,const void *pixels, ExceptionInfo *exception );
|
||||||
void magick_set_property( Image *image, const char *property, const char *value,
|
void magick_set_property( Image *image, const char *property, const char *value,
|
||||||
ExceptionInfo *exception );
|
ExceptionInfo *exception );
|
||||||
|
void magick_set_image_option( ImageInfo *image_info,
|
||||||
|
const char *name, const char *value );
|
||||||
|
void magick_set_number_scenes( ImageInfo *image_info,
|
||||||
|
int scene, int number_scenes );
|
||||||
|
|
||||||
void magick_inherit_exception( ExceptionInfo *exception, Image *image );
|
void magick_inherit_exception( ExceptionInfo *exception, Image *image );
|
||||||
void magick_vips_error( const char *domain, ExceptionInfo *exception );
|
void magick_vips_error( const char *domain, ExceptionInfo *exception );
|
||||||
|
@ -228,7 +228,6 @@ read_new( const char *filename, VipsImage *im,
|
|||||||
*/
|
*/
|
||||||
VIPS_SETSTR( read->image_info->density, density );
|
VIPS_SETSTR( read->image_info->density, density );
|
||||||
|
|
||||||
#ifdef HAVE_SETIMAGEOPTION
|
|
||||||
/* When reading DICOM images, we want to ignore any
|
/* When reading DICOM images, we want to ignore any
|
||||||
* window_center/_width setting, since it may put pixels outside the
|
* window_center/_width setting, since it may put pixels outside the
|
||||||
* 0-65535 range and lose data.
|
* 0-65535 range and lose data.
|
||||||
@ -236,30 +235,12 @@ read_new( const char *filename, VipsImage *im,
|
|||||||
* These window settings are attached as vips metadata, so our caller
|
* These window settings are attached as vips metadata, so our caller
|
||||||
* can interpret them if it wants.
|
* can interpret them if it wants.
|
||||||
*/
|
*/
|
||||||
SetImageOption( read->image_info, "dcm:display-range", "reset" );
|
magick_set_image_option( read->image_info,
|
||||||
#endif /*HAVE_SETIMAGEOPTION*/
|
"dcm:display-range", "reset" );
|
||||||
|
|
||||||
if( read->page > 0 ) {
|
if( read->page > 0 )
|
||||||
#ifdef HAVE_NUMBER_SCENES
|
magick_set_number_scenes( read->image_info,
|
||||||
/* I can't find docs for these fields, but this seems to work.
|
read->page, read->n );
|
||||||
*/
|
|
||||||
char page[256];
|
|
||||||
|
|
||||||
read->image_info->scene = read->page;
|
|
||||||
read->image_info->number_scenes = read->n;
|
|
||||||
|
|
||||||
/* Some IMs must have the string version set as well.
|
|
||||||
*/
|
|
||||||
vips_snprintf( page, 256, "%d-%d",
|
|
||||||
read->page, read->page + read->n );
|
|
||||||
read->image_info->scenes = strdup( page );
|
|
||||||
#else /*!HAVE_NUMBER_SCENES*/
|
|
||||||
/* This works with GM 1.2.31 and probably others.
|
|
||||||
*/
|
|
||||||
read->image_info->subimage = read->page;
|
|
||||||
read->image_info->subrange = read->n;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf( "magick2vips: read_new: %s\n", read->filename );
|
printf( "magick2vips: read_new: %s\n", read->filename );
|
||||||
@ -703,7 +684,9 @@ get_pixels( Image *image, int left, int top, int width, int height )
|
|||||||
IndexPacket *indexes = (IndexPacket *)
|
IndexPacket *indexes = (IndexPacket *)
|
||||||
GetVirtualIndexQueue( image );
|
GetVirtualIndexQueue( image );
|
||||||
#else
|
#else
|
||||||
IndexPacket *indexes = GetIndexes( image );
|
/* Was GetIndexes(), but that's now deprecated.
|
||||||
|
*/
|
||||||
|
IndexPacket *indexes = AccessMutableIndexes( image );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
@ -325,20 +325,12 @@ vips_foreign_load_magick7_build( VipsObject *object )
|
|||||||
* These window settings are attached as vips metadata, so our caller
|
* These window settings are attached as vips metadata, so our caller
|
||||||
* can interpret them if it wants.
|
* can interpret them if it wants.
|
||||||
*/
|
*/
|
||||||
SetImageOption( magick7->image_info, "dcm:display-range", "reset" );
|
magick_set_image_option( magick7->image_info,
|
||||||
|
"dcm:display-range", "reset" );
|
||||||
|
|
||||||
if( magick7->page > 0 ) {
|
if( magick7->page > 0 )
|
||||||
/* I can't find docs for these fields, but this seems to work.
|
magick_set_number_scenes( magick7->image_info,
|
||||||
*/
|
magick7->page, magick7->n );
|
||||||
char page[256];
|
|
||||||
|
|
||||||
magick7->image_info->scene = magick7->page;
|
|
||||||
magick7->image_info->number_scenes = magick7->n;
|
|
||||||
|
|
||||||
vips_snprintf( page, 256, "%d-%d",
|
|
||||||
magick7->page, magick7->page + magick7->n );
|
|
||||||
magick7->image_info->scenes = strdup( page );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( VIPS_OBJECT_CLASS( vips_foreign_load_magick7_parent_class )->
|
if( VIPS_OBJECT_CLASS( vips_foreign_load_magick7_parent_class )->
|
||||||
build( object ) )
|
build( object ) )
|
||||||
|
Loading…
x
Reference in New Issue
Block a user