void updateNoCopy_wrapper(Magick::Blob& blob, std::string& data) { std::string str; char* w = new char[data.size() + 1]; std::copy(str.begin(), str.end(), w); w[str.size()] = '\0'; blob.updateNoCopy(w,data.size(),Magick::Blob::NewAllocator); }
ImagePtr MagickImageLoader::load(std::istream& stream) { if (stream.fail()) throw Exception("[MagickImageLoader::load] invalid stream given"); long int stream_size = streamSize(stream); if (stream_size < 1) throw Exception("[MagickImageLoader::load] empty stream given"); boost::scoped_array<char> tmp(new char[stream_size]); Magick::Blob blob; blob.updateNoCopy(tmp.get(), stream_size); try { Magick::Image image; image.density("10"); image.ping(blob); convertImageDpi(image); image.read(blob); return load(image); } catch (Magick::Exception &e) { cfError(MODULE_RDIB) << e.what(); throw Exception("[MagickImageLoader::load] failed"); } }