0 out of 1 rated this helpful - Rate this topic

BitmapImage.StreamSource Property

Gets or sets the stream source of the BitmapImage.

Namespace:  System.Windows.Media.Imaging
Assembly:  PresentationCore (in PresentationCore.dll)
public Stream StreamSource { get; set; }

Property Value

Type: System.IO.Stream
The stream source of the BitmapImage. The default is null.

Identifier field

StreamSourceProperty

Metadata properties set to true

None

If StreamSource and UriSource are both set, the StreamSource value is ignored.

Set the CacheOption property to BitmapCacheOption.OnLoad if you wish to close the stream after the BitmapImage is created. The default OnDemand cache option retains access to the stream until the bitmap is needed, and cleanup is handled by the garbage collector.

.NET Framework

Supported in: 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
A Stream for StreamSource must say it CanSeek
I can only get a BitmapImage to display correctly if the StreamSource says it CanSeek. This feels like a bug to me. I have a Stream from a zip file that I want to display, but it can't seek. If I create a stream delegator named BitmapStream that says it CanRead and use the zip stream as the delegate, it works. If I use a FileStream as the delegate, but hard code CanRead to false, the BitmapImage doesn't display. I don't understand what is going on internally. (VS 2008 & . NET 3.5)
How to create a BitmapImage from Bitmap
Shown here how you can create a BitmapImage from a .NET GDI+ Bitmap object:
Bitmap bitmap = ....;
BitmapImage qrCode = new BitmapImage();
using (MemoryStream ms = new MemoryStream()) {
     bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
     ms.Position = 0;

     qrCode.BeginInit();
     qrCode.CacheOption = BitmapCacheOption.OnLoad;
     qrCode.UriSource = null;
     qrCode.StreamSource = ms;
     qrCode.EndInit();
}

Note that if you want to hold the stream open, you can omit the using statement and the CacheOption as the BitmapImage will lazy load from the stream. Also, don't forget to dispose the Bitmap object!