I've wanted to convert rendered XAML content into an image file (PNG is a good start so I chose it for today's post). I took advantage of an open-source, third party library called .NET Image Tools which did a great job encoding PNG files. It can be found @CodePlex, the open-source project hosting space from Microsoft (check it out).
Let's start with the basic idea of this post. You have let's say, a Silverlight Canvas control and you would like to take a snapshot of it, make a print screen but not using external tools yet having it done within your own Silverlight app.
Here's the code:
//Creating a WritableBitmap object in order to use it as the source
//of an Image control
WriteableBitmap writableBitmap = new WriteableBitmap(MyPrintScreenCanvas, null);
BitmapSource bitmapSource = writableBitmap;
//Creating an Image instance which will be encoded later-on
Image image = new Image();
image.Source = bitmapSource;
//Encoding the Image object to a PNG file
//using .NET Image Tools library
ImageTools.IO.Png.PngEncoder pngEncoder =
new ImageTools.IO.Png.PngEncoder();
MemoryStream ms = new MemoryStream();
ImageTools.Image ITImage = ImageTools.ImageExtensions.ToImage(MyPrintScreenCanvas);
pngEncoder.Encode(ITImage, ms);
Now you have the MemoryStream and you can save it to a file, send it as an email or store it on a server using a WCF or ASMX web service.
Thanks and bye bye, Arthur