diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-06-12 22:27:11 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-06-12 22:27:11 +0100 |
| commit | 4e411ea97b4dab8a5fa282d1d4cf7971ef1e24ad (patch) | |
| tree | 06db8731e77dfeaf537f2814d73c7a599035b95c /src/lib/image_proxy.cc | |
| parent | 8102046b2f29e0c7b234c29bf204b056cb30e64f (diff) | |
| parent | 66162217d93baa3fd50594bb013a44bbd779d02a (diff) | |
Merge master.
Diffstat (limited to 'src/lib/image_proxy.cc')
| -rw-r--r-- | src/lib/image_proxy.cc | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/src/lib/image_proxy.cc b/src/lib/image_proxy.cc index 16bd92f6e..1eb9c169c 100644 --- a/src/lib/image_proxy.cc +++ b/src/lib/image_proxy.cc @@ -55,7 +55,7 @@ RawImageProxy::RawImageProxy (shared_ptr<cxml::Node> xml, shared_ptr<Socket> soc xml->number_child<int> ("Width"), xml->number_child<int> ("Height") ); - _image.reset (new Image (PIX_FMT_RGB24, size, true)); + _image.reset (new Image (static_cast<AVPixelFormat> (xml->number_child<int> ("PixelFormat")), size, true)); _image->read_from_socket (socket); } @@ -71,6 +71,7 @@ RawImageProxy::add_metadata (xmlpp::Node* node) const node->add_child("Type")->add_child_text (N_("Raw")); node->add_child("Width")->add_child_text (dcp::raw_convert<string> (_image->size().width)); node->add_child("Height")->add_child_text (dcp::raw_convert<string> (_image->size().height)); + node->add_child("PixelFormat")->add_child_text (dcp::raw_convert<string> (_image->pixel_format ())); } void @@ -132,22 +133,14 @@ MagickImageProxy::image () const _image.reset (new Image (PIX_FMT_RGB24, size, true)); - using namespace MagickCore; - + /* 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 y = 0; y < size.height; ++y) { - uint8_t* q = p; - for (int x = 0; x < size.width; ++x) { - Magick::Color c = magick_image->pixelColor (x, y); - *q++ = c.redQuantum() * 255 / QuantumRange; - *q++ = c.greenQuantum() * 255 / QuantumRange; - *q++ = c.blueQuantum() * 255 / QuantumRange; - } + 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]; } - delete magick_image; - LOG_TIMING ("[%1] MagickImageProxy completes decode and convert of %2 bytes", boost::this_thread::get_id(), _blob.length()); return _image; |
