How to: Convert a BitmapSource to a Different PixelFormat

This example demonstrates how to convert a BitmapSource object (BitmapImage) to a different PixelFormat using a FormatConvertedBitmap.

Example

'/// Create a BitmapImage and set it's DecodePixelWidth to 200. Use  /////
'/// this BitmapImage as a source for other BitmapSource objects.    /////
Dim myBitmapImage As New BitmapImage()

' BitmapSource objects like BitmapImage can only have their properties
' changed within a BeginInit/EndInit block.
myBitmapImage.BeginInit()
myBitmapImage.UriSource = New Uri("sampleImages/WaterLilies.jpg", UriKind.Relative)

' To save significant application memory, set the DecodePixelWidth or  
' DecodePixelHeight of the BitmapImage value of the image source to the desired 
' height or width of the rendered image. If you don't do this, the application will 
' cache the image as though it were rendered as its normal size rather then just 
' the size that is displayed.
' Note: In order to preserve aspect ratio, set DecodePixelWidth
' or DecodePixelHeight but not both.
myBitmapImage.DecodePixelWidth = 200
myBitmapImage.EndInit()

'//////// Convert the BitmapSource to a new format ////////////
' Use the BitmapImage created above as the source for a new BitmapSource object
' which is set to a gray scale format using the FormatConvertedBitmap BitmapSource.                                               
' Note: New BitmapSource does not cache. It is always pulled when required.
Dim newFormatedBitmapSource As New FormatConvertedBitmap()

' BitmapSource objects like FormatConvertedBitmap can only have their properties
' changed within a BeginInit/EndInit block.
newFormatedBitmapSource.BeginInit()

' Use the BitmapSource object defined above as the source for this new 
' BitmapSource (chain the BitmapSource objects together).
newFormatedBitmapSource.Source = myBitmapImage


' Set the new format to Gray32Float (grayscale).
newFormatedBitmapSource.DestinationFormat = createPixelFormat()
newFormatedBitmapSource.EndInit()

///// Create a BitmapImage and set it's DecodePixelWidth to 200. Use  /////
///// this BitmapImage as a source for other BitmapSource objects.    /////

BitmapImage myBitmapImage = new BitmapImage();

// BitmapSource objects like BitmapImage can only have their properties
// changed within a BeginInit/EndInit block.
myBitmapImage.BeginInit();
myBitmapImage.UriSource = new Uri("sampleImages/WaterLilies.jpg",UriKind.Relative);

// To save significant application memory, set the DecodePixelWidth or  
// DecodePixelHeight of the BitmapImage value of the image source to the desired 
// height or width of the rendered image. If you don't do this, the application will 
// cache the image as though it were rendered as its normal size rather then just 
// the size that is displayed.
// Note: In order to preserve aspect ratio, set DecodePixelWidth
// or DecodePixelHeight but not both.
myBitmapImage.DecodePixelWidth = 200;
myBitmapImage.EndInit();

////////// Convert the BitmapSource to a new format ////////////
// Use the BitmapImage created above as the source for a new BitmapSource object
// which is set to a gray scale format using the FormatConvertedBitmap BitmapSource.                                               
// Note: New BitmapSource does not cache. It is always pulled when required.

FormatConvertedBitmap newFormatedBitmapSource = new FormatConvertedBitmap();

// BitmapSource objects like FormatConvertedBitmap can only have their properties
// changed within a BeginInit/EndInit block.
newFormatedBitmapSource.BeginInit();

// Use the BitmapSource object defined above as the source for this new 
// BitmapSource (chain the BitmapSource objects together).
newFormatedBitmapSource.Source = myBitmapImage;


// Set the new format to Gray32Float (grayscale).
newFormatedBitmapSource.DestinationFormat = createPixelFormat();
newFormatedBitmapSource.EndInit();

See Also

Concepts

Imaging Overview