BitmapImage.StreamSource Property
Gets or sets the stream source of the BitmapImage.
Assembly: PresentationCore (in PresentationCore.dll)
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.
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.
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)
- 9/7/2011
- Cameron Taggart
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!
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!
- 11/24/2010
- Sebazzz