summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTassilo Horn <tassilo@member.fsf.org>2011-01-11 21:14:13 +0100
committerTassilo Horn <tassilo@member.fsf.org>2011-01-11 21:14:13 +0100
commitf853f59905cce4c7b2dc442ff5da1a10769730b0 (patch)
treea47cfdc69a57399afd0ddc7f6966167bb7065064
parent059616e5a8aa257d8959ad852418fe2f8cc50140 (diff)
downloademacs-f853f59905cce4c7b2dc442ff5da1a10769730b0.tar.gz
* image.c (imagemagick_load_image, Finit_image_library): Free
intermediate image after creating a MagickWand from it. Terminate MagickWand environment after image loading.
-rw-r--r--src/ChangeLog6
-rw-r--r--src/image.c11
2 files changed, 14 insertions, 3 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 83524a5c048..a8755321a4d 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -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
diff --git a/src/image.c b/src/image.c
index fd1b921056c..c39a9ef2817 100644
--- a/src/image.c
+++ b/src/image.c
@@ -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);
}