This documentation is archived and is not being maintained.

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