Boost logo

Boost :

Subject: Re: [boost] [iostreams] binary memory stream
From: Kenny Riddile (kfriddile_at_[hidden])
Date: 2009-03-29 21:10:19

Kenny Riddile wrote:
> I'm still pretty inexperienced with the iostreams library, so this may
> be a simple question. I'm trying to use GIL to write a PNG to a memory
> stream instead of a file stream. The write_view() function in the new
> version of GIL's io extension expects an ostream opened in binary mode
> as it's first parameter, such as:
> using namespace std;
> using namespace boost::gil;
> ofstream outputStream( "foo.png", ios::out | ios::binary );
> write_view( outputStream, const_view(image), png_tag() );
> I'm attempting to write to memory instead of a file, by doing this:
> using namespace boost::gil;
> using namespace boost::iostreams;
> typedef stream< back_insert_device< std::vector<char> > > BufferStream;
> std::vector<char> buffer;
> BufferStream bufferStream( buffer );
> write_view( bufferStream, const_view(image), png_tag() );
> The data that ends up in buffer is identical to the data that ends up in
> foo.png from the first example if I don't open outputStream in binary
> mode. So how can I make a binary memory stream with the iostreams
> library? Do I need to write my own filter?
> _______________________________________________
> Unsubscribe & other changes:

Ok, so redefining bufferStream like so works:

std::stringstream bufferStream( std::ios_base::in | std::ios_base::out |
std::ios_base::binary );

but it just feels "weird". Is there any cleaner way to do this with the
iostreams library?

Boost list run by bdawes at, gregod at, cpdaniel at, john at