diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-06-09 00:38:55 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-06-09 00:38:55 +0100 |
| commit | 604e8aae4fc6ed22f9051173b11f509d178617c7 (patch) | |
| tree | 449fa35cb143d58c976c256cad3bb4cb9e6905c8 /src/lib/image_proxy.cc | |
| parent | 4ec396aaae58d860a47ab883347abee227838b4a (diff) | |
Fix corrupted still image sources in some cases.
Diffstat (limited to 'src/lib/image_proxy.cc')
| -rw-r--r-- | src/lib/image_proxy.cc | 12 |
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()); |
