summaryrefslogtreecommitdiff
path: root/src/lib/image_proxy.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-06-09 00:38:55 +0100
committerCarl Hetherington <cth@carlh.net>2014-06-09 00:38:55 +0100
commit604e8aae4fc6ed22f9051173b11f509d178617c7 (patch)
tree449fa35cb143d58c976c256cad3bb4cb9e6905c8 /src/lib/image_proxy.cc
parent4ec396aaae58d860a47ab883347abee227838b4a (diff)
Fix corrupted still image sources in some cases.
Diffstat (limited to 'src/lib/image_proxy.cc')
-rw-r--r--src/lib/image_proxy.cc12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/lib/image_proxy.cc b/src/lib/image_proxy.cc
index dbfd8c6d4..618cdbcf3 100644
--- a/src/lib/image_proxy.cc
+++ b/src/lib/image_proxy.cc
@@ -133,11 +133,13 @@ MagickImageProxy::image () const
_image.reset (new Image (PIX_FMT_RGB24, size, true));
- using namespace MagickCore;
-
- magick_image->write (0, 0, size.width, size.height, "RGB", CharPixel, _image->data()[0]);
-
- delete magick_image;
+ /* Write line-by-line here as _image must be aligned, and write() cannot be told about strides */
+ uint8_t* p = _image->data()[0];
+ for (int i = 0; i < size.height; ++i) {
+ using namespace MagickCore;
+ magick_image->write (0, i, size.width, 1, "RGB", CharPixel, p);
+ p += _image->stride()[0];
+ }
LOG_TIMING ("[%1] MagickImageProxy completes decode and convert of %2 bytes", boost::this_thread::get_id(), _blob.length());