diff options
author | Lars Magne Ingebrigtsen <larsi@gnus.org> | 2013-08-15 21:46:02 +0200 |
---|---|---|
committer | Lars Magne Ingebrigtsen <larsi@gnus.org> | 2013-08-15 21:46:02 +0200 |
commit | 7967001450f4a3e76e37355740fa942290cede26 (patch) | |
tree | 9daeb7a67d90f18f650d565a1fe6aa68d1adfcc8 /src | |
parent | 1d18b1e6ab1aabab94554fc10e24811478346fab (diff) | |
download | emacs-7967001450f4a3e76e37355740fa942290cede26.tar.gz |
(imagemagick_compute_animated_image): Allow certain degenerate images
(imagemagick_compute_animated_image): Allow images that say they
have sub-images that are bigger than the main image, but just crop
them.
Diffstat (limited to 'src')
-rw-r--r-- | src/ChangeLog | 3 | ||||
-rw-r--r-- | src/image.c | 25 |
2 files changed, 15 insertions, 13 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 431802eab45..dd4697298ac 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -4,6 +4,9 @@ when sub-images are smaller than the main image. (imagemagick_compute_animated_image): Setting the iterator row to zero is apparently not allowed. + (imagemagick_compute_animated_image): Allow images that say they + have sub-images that are bigger than the main image, but just crop + them. 2013-08-15 Jan Djärv <jan.h.d@swipnet.se> diff --git a/src/image.c b/src/image.c index 6f92c583554..d7e1d7991dd 100644 --- a/src/image.c +++ b/src/image.c @@ -7900,6 +7900,7 @@ imagemagick_compute_animated_image (MagickWand *super_wand, int ino) ssize_t source_left, source_top; MagickPixelPacket pixel; DisposeType dispose; + ptrdiff_t lines = 0; MagickSetIteratorIndex (super_wand, i); sub_wand = MagickGetImage (super_wand); @@ -7907,17 +7908,6 @@ imagemagick_compute_animated_image (MagickWand *super_wand, int ino) MagickGetImagePage (sub_wand, &source_width, &source_height, &source_left, &source_top); - /* Sanity check. The sub-image should not be bigger than the - base image. */ - if (source_height + source_top > dest_height) - { - DestroyMagickWand (composite_wand); - DestroyMagickWand (sub_wand); - animation_cache = NULL; - image_error ("Inconsinstent animation size", Qnil, Qnil); - return NULL; - } - dispose = MagickGetImageDispose (sub_wand); source_iterator = NewPixelIterator (sub_wand); @@ -7946,17 +7936,26 @@ imagemagick_compute_animated_image (MagickWand *super_wand, int ino) /* The sub-image may not start at origo, so move the destination iterator to where the sub-image should start. */ if (source_top > 0) - PixelSetIteratorRow (dest_iterator, source_top); + { + PixelSetIteratorRow (dest_iterator, source_top); + lines = source_top; + } while ((source = PixelGetNextIteratorRow (source_iterator, &source_width)) != NULL) { ptrdiff_t x; + + /* Sanity check. This shouldn't happen, but apparently + does in some pictures. */ + if (++lines >= dest_height) + break; + dest = PixelGetNextIteratorRow (dest_iterator, &dest_width); for (x = 0; x < source_width; x++) { /* Sanity check. This shouldn't happen, but apparently - does in some pictures. */ + also does in some pictures. */ if (x + source_left > dest_width) break; /* Normally we only copy over non-transparent pixels, |