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.


///// 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.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;

////////// 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.

// 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();

See Also