2015-02-24 8:12 GMT+01:00 Yann LEYDIER <y...@leydier.info>: > According to this : http://www.cplusplus.com/ > reference/string/basic_string/basic_string/ > > "If the resulting string length would exceed the max_size, a length_error > exception is thrown." > > Your image is to big to fit in a std::string. >
Thanks for your remark... I write the following test code, std::cout << "Length : " << ref_orig->get_byte_length() << std::endl << "Max Size : " << image_pixels.max_size() << std::endl; And after, I obtained, Length : 750000 Max Size : 4611686018427387897 I don't know if both values are expressed according the same magnitude... if so, I suppose the problem would be another... Glus > > On 23/02/2015 23:05, Glus Xof wrote: > >> >> >> 2015-02-23 22:21 GMT+01:00 Markus Kolb <markus.kolb+gt...@tower-net.de >> <mailto:markus.kolb+gt...@tower-net.de>>: >> >> Am 2015-02-23 21:40, schrieb Glus Xof: >> >> Hi guys, >> >> Before anything, I admit that probably my question is not an >> specifically >> Gtkmm question... but nevertheless I think you may know how >> Gdk::Pixbuf is >> done... >> >> Having the following, >> >> Glib::RefPtr<Gdk::Pixbuf> ref_orig = Gdk::Pixbuf::create_from_file >> ("./file.png"); >> >> I'm trying to temporary store (because I need so) the image data >> into a >> std::string object. It seems that get_pixels() could solve the >> problem, >> getting a pointer of type guint8. >> >> >> Seems that gdkmm is not up-to-date here. >> gdk uses a guchar*. But this shouldn't be a problem. >> >> >> So, I wrote as follows, >> >> std::string image_pixels (reinterpret_cast<const char >> *>(ref_orig->get_pixels()), ref_orig->get_rowstride()); >> >> >> I think this does not what you expect. >> >> https://developer.gnome.org/__gdk-pixbuf/stable/gdk-pixbuf-_ >> _The-GdkPixbuf-Structure.html#__gdk-pixbuf-get-rowstride >> <https://developer.gnome.org/gdk-pixbuf/stable/gdk-pixbuf- >> The-GdkPixbuf-Structure.html#gdk-pixbuf-get-rowstride> >> >> See also the part below the description headline. >> >> Maybe you should use gsize Gdk::Pixbuf::get_byte_length() >> because >> https://developer.gnome.org/__gdk-pixbuf/stable/gdk-pixbuf-_ >> _The-GdkPixbuf-Structure.html#__gdk-pixbuf-get-pixels-with-__length >> <https://developer.gnome.org/gdk-pixbuf/stable/gdk-pixbuf- >> The-GdkPixbuf-Structure.html#gdk-pixbuf-get-pixels-with-length> >> is missing. >> >> I hope it will help you. >> >> But think about the std::string. Big ? ;-) >> >> >> According to Yann & Markus' comments, I remake my code as follows, >> >> Glib::RefPtr<Gdk::Pixbuf> ref_orig = Gdk::Pixbuf::create_from_file >> ("./file.png"); >> >> // Glib::ustring::c_str() or data() allows me to get an std::string >> object... >> >> Glib::ustring image_pixels ( >> reinterpret_cast<const char *>(ref_orig->get_pixels()), >> ref_orig->get_byte_length()); >> >> Glib::RefPtr<Gdk::Pixbuf> ref_dest = >> Gdk::Pixbuf::create_from_data ( >> reinterpret_cast<const guint8*>(image_pixels.data()), >> Gdk::COLORSPACE_RGB, >> ref_orig->get_has_alpha(), ref_orig->get_bits_per_sample(), >> ref_orig->get_width(), ref_orig->get_height(), >> ref_orig->get_rowstride()); >> >> But, at runtime I get a lenght error exception, >> >> terminate called after throwing an instance of 'std::length_error' >> what(): basic_string::_S_create >> >> Could help ? >> >> Glus >> >> >> >> >> _________________________________________________ >> gtkmm-list mailing list >> gtkmm-list@gnome.org <mailto:gtkmm-list@gnome.org> >> https://mail.gnome.org/__mailman/listinfo/gtkmm-list >> <https://mail.gnome.org/mailman/listinfo/gtkmm-list> >> >> >> >> >> _______________________________________________ >> gtkmm-list mailing list >> gtkmm-list@gnome.org >> https://mail.gnome.org/mailman/listinfo/gtkmm-list >> >> > _______________________________________________ > gtkmm-list mailing list > gtkmm-list@gnome.org > https://mail.gnome.org/mailman/listinfo/gtkmm-list >
_______________________________________________ gtkmm-list mailing list gtkmm-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtkmm-list