I am currently writing my first windows 8 applications. One of the user scenario’s was, to be download images from a website and to be able to share it with other apps using share contract. I had to spend quite a bit of time to figure out how to do this. I decided to put together a blog post with various samples on how to work with streams.
Scenario 1: Download image as Bytes and convert into RandomAccessStreamReference.
In order to share image data, we need object of type “RandomAccessStreamReference”.
- Download the image data using HttpClient class.
- Write this data into IRandomAccessStream. There are a few WinRT classes which implement the IRandomAccessStream interface. I will use InMemoryRandomAccessStream, as I do not need to store the data in a file, an in memory stream should suffice. In order to write to the InMemoryRandomAccessStream, we need to acquire it as a writable stream (IOutputStream) and then write to it using a DataWriter class.
- Create the RandomAccessStreamReference, to be used to set the bitmap data for the share data package
Scenario 2: Download image from a website as a stream and create a RandomAccessStreamReference from it
- Download the image as Stream. This returns a non seekable stream (this means we cannot read the size or length of the stream, during read operations.
- Convert the Non Seekable stream into an IRandomAccessStream. I have created an extension method to do this .
- Use the IRandomAccessStream and created the RandomAccessStreamReference to set the bitmap data.