* image.c (imagemagick_load_image, Finit_image_library): Free

intermediate image after creating a MagickWand from it.  Terminate
MagickWand environment after image loading.
This commit is contained in:
Tassilo Horn 2011-01-11 21:14:13 +01:00
parent 059616e5a8
commit f853f59905
2 changed files with 14 additions and 3 deletions

View file

@ -1,3 +1,9 @@
2011-01-11 Tassilo Horn <tassilo@member.fsf.org>
* image.c (imagemagick_load_image, Finit_image_library): Free
intermediate image after creating a MagickWand from it. Terminate
MagickWand environment after image loading.
2011-01-10 Michael Albinus <michael.albinus@gmx.de>
* dbusbind.c (Fdbus_register_service): Raise an error in case of

View file

@ -7521,6 +7521,9 @@ imagemagick_load_image (/* Pointer to emacs frame structure. */
image. Interface :index is same as for GIF. First we "ping" the
image to see how many sub-images it contains. Pinging is faster
than loading the image to find out things about it. */
/* MagickWandGenesis() initializes the imagemagick library. */
MagickWandGenesis ();
image = image_spec_value (img->spec, QCindex, NULL);
ino = INTEGERP (image) ? XFASTINT (image) : 0;
ping_wand = NewMagickWand ();
@ -7549,6 +7552,7 @@ imagemagick_load_image (/* Pointer to emacs frame structure. */
img->data.lisp_val));
DestroyMagickWand (ping_wand);
/* Now, after pinging, we know how many images are inside the
file. If its not a bundle, just one. */
@ -7566,6 +7570,7 @@ imagemagick_load_image (/* Pointer to emacs frame structure. */
if (im_image != NULL)
{
image_wand = NewMagickWandFromImage (im_image);
DestroyImage(im_image);
status = MagickTrue;
}
else
@ -7576,7 +7581,7 @@ imagemagick_load_image (/* Pointer to emacs frame structure. */
image_wand = NewMagickWand ();
status = MagickReadImageBlob (image_wand, contents, size);
}
image_error ("im read failed", Qnil, Qnil);
if (status == MagickFalse) goto imagemagick_error;
/* If width and/or height is set in the display spec assume we want
@ -7805,11 +7810,13 @@ imagemagick_load_image (/* Pointer to emacs frame structure. */
/* Final cleanup. image_wand should be the only resource left. */
DestroyMagickWand (image_wand);
MagickWandTerminus ();
return 1;
imagemagick_error:
DestroyMagickWand (image_wand);
MagickWandTerminus ();
/* TODO more cleanup. */
image_error ("Error parsing IMAGEMAGICK image `%s'", img->spec, Qnil);
return 0;
@ -8681,8 +8688,6 @@ of `dynamic-library-alist', which see). */)
#if defined (HAVE_IMAGEMAGICK)
if (EQ (type, Qimagemagick))
{
/* MagickWandGenesis() initializes the imagemagick library. */
MagickWandGenesis ();
return CHECK_LIB_AVAILABLE (&imagemagick_type, init_imagemagick_functions,
libraries);
}