stuff
This commit is contained in:
parent
1cab57014c
commit
1d473ef5cc
@ -17,6 +17,7 @@
|
|||||||
- add --enable-debug=xxx flag
|
- add --enable-debug=xxx flag
|
||||||
- im_iterate() -> vips_sink()
|
- im_iterate() -> vips_sink()
|
||||||
- better number-of-bands detection for im_magick2vips()
|
- better number-of-bands detection for im_magick2vips()
|
||||||
|
- added im_get_argv0()
|
||||||
|
|
||||||
16/1/10 started 7.21.2
|
16/1/10 started 7.21.2
|
||||||
- "invalidate" is careful to keep images alive, so invalidate callbacks can do
|
- "invalidate" is careful to keep images alive, so invalidate callbacks can do
|
||||||
|
2
TODO
2
TODO
@ -1,5 +1,3 @@
|
|||||||
- im_magick2vips() needs rewriting, argh
|
|
||||||
|
|
||||||
|
|
||||||
- add support for PFM files, portable float maps
|
- add support for PFM files, portable float maps
|
||||||
|
|
||||||
|
53
configure.in
53
configure.in
@ -323,18 +323,6 @@ if test x"$with_magick" != "xno"; then
|
|||||||
])
|
])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$with_magick" != "xno"; then
|
|
||||||
# we need ResetImageAttributeIterator() / GetNextImageAttribute() to loop
|
|
||||||
# over attrs, but that's 6.2+ I think ... test for them
|
|
||||||
# graphicsmagick only has GetImageAttribute(), test for that as a fallback
|
|
||||||
save_LIBS=$LIBS
|
|
||||||
LIBS="$LIBS $MAGICK_LIBS"
|
|
||||||
AC_CHECK_FUNCS(GetNextImageAttribute GetImageAttribute,
|
|
||||||
AC_DEFINE(HAVE_MAGICK_ATTR,1,
|
|
||||||
[define if your magick has attribute support.]))
|
|
||||||
LIBS=$save_LIBS
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test x"$with_magick" != "xno"; then
|
if test x"$with_magick" != "xno"; then
|
||||||
# we SetImageOption to disable some DICOM read processing, but that's only
|
# we SetImageOption to disable some DICOM read processing, but that's only
|
||||||
# in more recent imagemagicks and not in graphicsmagick
|
# in more recent imagemagicks and not in graphicsmagick
|
||||||
@ -346,6 +334,47 @@ if test x"$with_magick" != "xno"; then
|
|||||||
LIBS=$save_LIBS
|
LIBS=$save_LIBS
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test x"$with_magick" != "xno"; then
|
||||||
|
# newer ImageMagicks use MagickCoreGenesis instead of InitializeMagick argh
|
||||||
|
save_LIBS=$LIBS
|
||||||
|
LIBS="$LIBS $MAGICK_LIBS"
|
||||||
|
AC_CHECK_FUNCS(MagickCoreGenesis,
|
||||||
|
AC_DEFINE(HAVE_MAGICKCOREGENESIS,1,
|
||||||
|
[define if your magick has MagickCoreGenesis.]))
|
||||||
|
LIBS=$save_LIBS
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test x"$with_magick" != "xno"; then
|
||||||
|
# newer ImageMagicks use ResetImagePropertyIterator instead of
|
||||||
|
# ResetImageAttributeIterator argh
|
||||||
|
save_LIBS=$LIBS
|
||||||
|
LIBS="$LIBS $MAGICK_LIBS"
|
||||||
|
AC_CHECK_FUNCS(ResetImagePropertyIterator,
|
||||||
|
AC_DEFINE(HAVE_RESETIMAGEPROPERTYITERATOR,1,
|
||||||
|
[define if your magick has ResetImagePropertyIterator.]))
|
||||||
|
LIBS=$save_LIBS
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test x"$with_magick" != "xno"; then
|
||||||
|
# so ... do we have ResetImageAttributeIterator()? GM does not
|
||||||
|
save_LIBS=$LIBS
|
||||||
|
LIBS="$LIBS $MAGICK_LIBS"
|
||||||
|
AC_CHECK_FUNCS(ResetImageAttributeIterator,
|
||||||
|
AC_DEFINE(HAVE_RESETIMAGEATTRIBUTEITERATOR,1,
|
||||||
|
[define if your magick has ResetImageAttributeIterator.]))
|
||||||
|
LIBS=$save_LIBS
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test x"$with_magick" != "xno"; then
|
||||||
|
# more recent magicks have GetVirtualPixels rather than GetImagePixels
|
||||||
|
save_LIBS=$LIBS
|
||||||
|
LIBS="$LIBS $MAGICK_LIBS"
|
||||||
|
AC_CHECK_FUNCS(GetVirtualPixels,
|
||||||
|
AC_DEFINE(HAVE_GETVIRTUALPIXELS,1,
|
||||||
|
[define if your magick has GetVirtualPixels.]))
|
||||||
|
LIBS=$save_LIBS
|
||||||
|
fi
|
||||||
|
|
||||||
# liboil
|
# liboil
|
||||||
AC_ARG_WITH([liboil],
|
AC_ARG_WITH([liboil],
|
||||||
AS_HELP_STRING([--without-liboil], [build without liboil (default: test)]))
|
AS_HELP_STRING([--without-liboil], [build without liboil (default: test)]))
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
* - gtkdoc
|
* - gtkdoc
|
||||||
* 30/4/10
|
* 30/4/10
|
||||||
* - better number of bands detection with GetImageType()
|
* - better number of bands detection with GetImageType()
|
||||||
|
* - use new API stuff, argh
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -158,7 +159,11 @@ read_new( const char *filename, IMAGE *im )
|
|||||||
static int inited = 0;
|
static int inited = 0;
|
||||||
|
|
||||||
if( !inited ) {
|
if( !inited ) {
|
||||||
|
#ifdef HAVE_MAGICKCOREGENESIS
|
||||||
|
MagickCoreGenesis( im_get_argv0(), MagickFalse );
|
||||||
|
#else /*!HAVE_MAGICKCOREGENESIS*/
|
||||||
InitializeMagick( "" );
|
InitializeMagick( "" );
|
||||||
|
#endif /*HAVE_MAGICKCOREGENESIS*/
|
||||||
inited = 1;
|
inited = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,9 +246,6 @@ parse_header( Read *read )
|
|||||||
IMAGE *im = read->im;
|
IMAGE *im = read->im;
|
||||||
Image *image = read->image;
|
Image *image = read->image;
|
||||||
|
|
||||||
#ifdef HAVE_MAGICK_ATTR
|
|
||||||
const ImageAttribute *attr;
|
|
||||||
#endif /*HAVE_MAGICK_ATTR*/
|
|
||||||
Image *p;
|
Image *p;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -353,34 +355,60 @@ parse_header( Read *read )
|
|||||||
*/
|
*/
|
||||||
im->Coding = IM_CODING_NONE;
|
im->Coding = IM_CODING_NONE;
|
||||||
|
|
||||||
#ifdef HAVE_MAGICK_ATTR
|
/* Three ways to loop over attributes / properties :-(
|
||||||
#ifdef HAVE_GETNEXTIMAGEATTRIBUTE
|
*/
|
||||||
/* Gah, magick6.something and later only. Attach any attributes.
|
|
||||||
|
#ifdef HAVE_RESETIMAGEPROPERTYITERATOR
|
||||||
|
{
|
||||||
|
char *key;
|
||||||
|
|
||||||
|
/* This is the most recent imagemagick API, test for this first.
|
||||||
|
*/
|
||||||
|
ResetImagePropertyIterator( image );
|
||||||
|
while( (key = GetNextImageProperty( image )) ) {
|
||||||
|
char name_text[256];
|
||||||
|
VipsBuf name;
|
||||||
|
|
||||||
|
vips_buf_init_static( &name, name_text, 256 );
|
||||||
|
vips_buf_appendf( &name, "magick-%s", key );
|
||||||
|
im_meta_set_string( im,
|
||||||
|
vips_buf_all( &name ), GetImageProperty( image, key ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#elif defined(HAVE_RESETIMAGEATTRIBUTEITERATOR)
|
||||||
|
{
|
||||||
|
const ImageAttribute *attr;
|
||||||
|
|
||||||
|
/* magick6.1-ish and later, deprecated in 6.5ish.
|
||||||
*/
|
*/
|
||||||
ResetImageAttributeIterator( image );
|
ResetImageAttributeIterator( image );
|
||||||
while( (attr = GetNextImageAttribute( image )) ) {
|
while( (attr = GetNextImageAttribute( image )) ) {
|
||||||
#elif defined(HAVE_GETIMAGEATTRIBUTE)
|
|
||||||
/* GraphicsMagick is missing the iterator: we have to loop ourselves.
|
|
||||||
* ->attributes is marked as private in the header, but there's no
|
|
||||||
* getter so we have to access it directly.
|
|
||||||
*/
|
|
||||||
for( attr = image->attributes; attr; attr = attr->next ) {
|
|
||||||
#else /*stuff*/
|
|
||||||
#error attributes enabled, but no access funcs found
|
|
||||||
#endif
|
|
||||||
char name_text[256];
|
char name_text[256];
|
||||||
VipsBuf name;
|
VipsBuf name;
|
||||||
|
|
||||||
vips_buf_init_static( &name, name_text, 256 );
|
vips_buf_init_static( &name, name_text, 256 );
|
||||||
vips_buf_appendf( &name, "magick-%s", attr->key );
|
vips_buf_appendf( &name, "magick-%s", attr->key );
|
||||||
im_meta_set_string( im, vips_buf_all( &name ), attr->value );
|
im_meta_set_string( im, vips_buf_all( &name ), attr->value );
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
printf( "key = \"%s\", value = \"%s\"\n",
|
|
||||||
attr->key, attr->value );
|
|
||||||
#endif /*DEBUG*/
|
|
||||||
}
|
}
|
||||||
#endif /*HAVE_MAGICK_ATTR*/
|
}
|
||||||
|
#else
|
||||||
|
{
|
||||||
|
const ImageAttribute *attr;
|
||||||
|
|
||||||
|
/* GraphicsMagick is missing the iterator: we have to loop ourselves.
|
||||||
|
* ->attributes is marked as private in the header, but there's no
|
||||||
|
* getter so we have to access it directly.
|
||||||
|
*/
|
||||||
|
for( attr = image->attributes; attr; attr = attr->next ) {
|
||||||
|
char name_text[256];
|
||||||
|
VipsBuf name;
|
||||||
|
|
||||||
|
vips_buf_init_static( &name, name_text, 256 );
|
||||||
|
vips_buf_appendf( &name, "magick-%s", attr->key );
|
||||||
|
im_meta_set_string( im, vips_buf_all( &name ), attr->value );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Do we have a set of equal-sized frames? Append them.
|
/* Do we have a set of equal-sized frames? Append them.
|
||||||
|
|
||||||
@ -556,8 +584,13 @@ static PixelPacket *
|
|||||||
get_pixels( Image *image, int left, int top, int width, int height )
|
get_pixels( Image *image, int left, int top, int width, int height )
|
||||||
{
|
{
|
||||||
PixelPacket *pixels;
|
PixelPacket *pixels;
|
||||||
|
|
||||||
|
#ifdef HAVE_GETVIRTUALPIXELS
|
||||||
|
if( !(pixels = (PixelPacket *) GetVirtualPixels( image,
|
||||||
|
left, top, width, height, &image->exception )) )
|
||||||
|
#else
|
||||||
if( !(pixels = GetImagePixels( image, left, top, width, height )) )
|
if( !(pixels = GetImagePixels( image, left, top, width, height )) )
|
||||||
|
#endif
|
||||||
return( NULL );
|
return( NULL );
|
||||||
|
|
||||||
/* Can't happen if red/green/blue are doubles.
|
/* Can't happen if red/green/blue are doubles.
|
||||||
@ -566,7 +599,13 @@ get_pixels( Image *image, int left, int top, int width, int height )
|
|||||||
/* Unpack palette.
|
/* Unpack palette.
|
||||||
*/
|
*/
|
||||||
if( image->storage_class == PseudoClass ) {
|
if( image->storage_class == PseudoClass ) {
|
||||||
|
#ifdef HAVE_GETVIRTUALPIXELS
|
||||||
|
IndexPacket *indexes = (IndexPacket *)
|
||||||
|
GetVirtualIndexQueue( image );
|
||||||
|
#else
|
||||||
IndexPacket *indexes = GetIndexes( image );
|
IndexPacket *indexes = GetIndexes( image );
|
||||||
|
#endif
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for( i = 0; i < width * height; i++ ) {
|
for( i = 0; i < width * height; i++ ) {
|
||||||
|
@ -291,6 +291,7 @@ extern const size_t im__sizeof_bandfmt[];
|
|||||||
(X) * IM_IMAGE_SIZEOF_PEL(I))
|
(X) * IM_IMAGE_SIZEOF_PEL(I))
|
||||||
#endif /*DEBUG*/
|
#endif /*DEBUG*/
|
||||||
|
|
||||||
|
const char *im_get_argv0( void );
|
||||||
int im_init_world( const char *argv0 );
|
int im_init_world( const char *argv0 );
|
||||||
GOptionGroup *im_get_option_group( void );
|
GOptionGroup *im_get_option_group( void );
|
||||||
|
|
||||||
|
@ -58,6 +58,8 @@
|
|||||||
#endif /*HAVE_CONFIG_H*/
|
#endif /*HAVE_CONFIG_H*/
|
||||||
#include <vips/intl.h>
|
#include <vips/intl.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <vips/vips.h>
|
#include <vips/vips.h>
|
||||||
#include <vips/thread.h>
|
#include <vips/thread.h>
|
||||||
#include <vips/internal.h>
|
#include <vips/internal.h>
|
||||||
@ -75,6 +77,24 @@
|
|||||||
*/
|
*/
|
||||||
GMutex *im__global_lock = NULL;
|
GMutex *im__global_lock = NULL;
|
||||||
|
|
||||||
|
/* Keep a copy of the argv0 here.
|
||||||
|
*/
|
||||||
|
static char *im__argv0 = NULL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* im_get_argv0:
|
||||||
|
*
|
||||||
|
* See also: im_init_world().
|
||||||
|
*
|
||||||
|
* Returns: a pointer to an internal copy of the argv0 string passed to
|
||||||
|
* im_init_world(). Do not free this value
|
||||||
|
*/
|
||||||
|
const char *
|
||||||
|
im_get_argv0( void )
|
||||||
|
{
|
||||||
|
return( im__argv0 );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* im_init_world:
|
* im_init_world:
|
||||||
* @argv0: name of application
|
* @argv0: name of application
|
||||||
@ -147,6 +167,8 @@ im_init_world( const char *argv0 )
|
|||||||
return( 0 );
|
return( 0 );
|
||||||
started = TRUE;
|
started = TRUE;
|
||||||
|
|
||||||
|
IM_SETSTR( im__argv0, argv0 );
|
||||||
|
|
||||||
/* Need gobject etc.
|
/* Need gobject etc.
|
||||||
*/
|
*/
|
||||||
g_type_init();
|
g_type_init();
|
||||||
|
Loading…
Reference in New Issue
Block a user