How to save BitmapImage / WriteableBitmap using SaveFileDialog in Silverlight 3.0?
Solution 1
There are a several open-source encoders out there:
FJCore: http://code.google.com/p/fjcore/
Joe Stegman's PNG Encoder: http://blogs.msdn.com/jstegman/archive/2008/04/21/dynamic-image-generation-in-silverlight.aspx
FreeImage: http://freeimage.sourceforge.net/
You can use any of these to encode various formats. Here's a post on saving a WriteableBitmap once it's baked:
UPDATE: After doing some more searching it looks like saving a WriteableBitmap to a file is limited in SL3 due to security issues. There is a workaround:
Looks like you have to save the contents of a Canvas to a file. You should be able to modify the sample to save JPEG or other formats.
Solution 2
I have previously written this post that goes through how to save XAML to a bitmap using a writeable bitmap, the save dialog box and FJCore.
http://blog.blueboxes.co.uk/2009/07/21/rendering-xaml-to-a-jpeg-using-silverlight-3/
RoguePlanetoid
Software Developer for over thirty years from BASIC, VB.NET to C# and a Web Developer for over fifteen years. Was a Windows Phone 8.1 and Windows 8.1 Developer including creating Applications and Tutorials. Now an ASP.NET Web Developer and Universal Windows Platform Developer in spare time Skills: XML, HTML, XHTML, CSS, XAML, ASP, VB (Classic and .NET), C#, Silverlight, WPF, Windows Phone, Win RT, UWP, ASP.NET MVC, Razor, MS SQL
Updated on June 05, 2022Comments
-
RoguePlanetoid almost 2 years
How can a WriteableBitmap from Silverlight be Saved onto the File System, I am unsure what to do with the FileStream to make this work, it can be in Bitmap, PNG, Jpeg format etc, as long as a commercial library is not required.
Is it possible to do this?Here is my call to SaveDialog, below:
Dim SaveDialog As New SaveFileDialog If SaveDialog.ShowDialog Then Try Using FileStream As Stream = SaveDialog.OpenFile ' Save Image File Code Here End Using Catch ex As Exception End Try End If
Edit
Added mention of WritableBitmap as this is what my XAML is writing to, I just need to save it, there is a WriteableBitmap.Pixels property which is a 1-dimensional array of integer pixels, can this be put into a filestream, and if so, how?
Here is some example code I have that writes the Pixel Stream to a File, however this works it does not "bitmapify" the data and the resulting output is useless but it is writing my image stream, I just need to know how to mark-it-up so that it is a Bitmap file (or anything else). I have found the JPEG and PNG examples before, but none of them explain well how they work, I may have to use the PNGEncoding method as this is the only one that will integrate into my codebase. But is there a simple BMP file version out there?
Dim Image As Imaging.WriteableBitmap = _Style.Image Dim Area As Integer = Image.PixelWidth * Image.PixelHeight For Raster As Integer = 0 To Area - 1 Dim Pixel As Integer = Image.Pixels(Raster) Dim Bytes() = BitConverter.GetBytes(Pixel And &HFF) FileStream.Write(Bytes, 0, 4) Next