File tree Expand file tree Collapse file tree 1 file changed +20
-6
lines changed
Expand file tree Collapse file tree 1 file changed +20
-6
lines changed Original file line number Diff line number Diff line change @@ -250,22 +250,36 @@ std::shared_ptr<image_any> fromstring(std::string const& str)
250250 {
251251 return std::make_shared<image_any>(reader->read (0 ,0 ,reader->width (), reader->height ()));
252252 }
253- throw mapnik::image_reader_exception (" Failed to load image from buffer" );
253+ throw mapnik::image_reader_exception (" Failed to load image from String" );
254+ }
255+
256+ namespace {
257+ struct view_release
258+ {
259+ view_release (Py_buffer & view)
260+ : view_(view) {}
261+ ~view_release ()
262+ {
263+ PyBuffer_Release (&view_);
264+ }
265+ Py_buffer & view_;
266+ };
254267}
255268
256269std::shared_ptr<image_any> frombuffer (PyObject * obj)
257270{
258- void const * buffer= 0 ;
259- Py_ssize_t buffer_len ;
260- if (PyObject_AsReadBuffer (obj, &buffer, &buffer_len ) == 0 )
271+ Py_buffer view ;
272+ view_release helper (view) ;
273+ if (obj != nullptr && PyObject_GetBuffer (obj, &view, PyBUF_SIMPLE ) == 0 )
261274 {
262- std::unique_ptr<image_reader> reader (get_image_reader (reinterpret_cast <char const *>(buffer),buffer_len));
275+ std::unique_ptr<image_reader> reader
276+ (get_image_reader (reinterpret_cast <char const *>(view.buf ), view.len ));
263277 if (reader.get ())
264278 {
265279 return std::make_shared<image_any>(reader->read (0 ,0 ,reader->width (),reader->height ()));
266280 }
267281 }
268- throw mapnik::image_reader_exception (" Failed to load image from buffer " );
282+ throw mapnik::image_reader_exception (" Failed to load image from Buffer " );
269283}
270284
271285void set_grayscale_to_alpha (image_any & im)
You can’t perform that action at this time.
0 commit comments