如何将Silverlight中的WriteableBitmap保存到文件系统中,我不确定如何处理FileStream以使其工作,它可以是Bitmap,PNG,Jpeg格式等,只要商业库不是必需的。
有可能这样做吗?
以下是我对SaveDialog的调用:
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
修改
添加了WritableBitmap,因为这是我的XAML写的内容,我只是需要 保存它,有一个WriteableBitmap.Pixels属性,它是一个整数像素的一维数组,可以放入文件流,如果是这样,怎么样?
以下是我将Pixel Stream写入a的示例代码 文件,但这工作它不“bitmapify”数据和 结果输出没用,但它正在写我的图像流,我只是 需要知道如何标记它以便它是一个位图文件(或其他任何东西)。 我之前找到过JPEG和PNG示例,但没有一个能够很好地解释它们是如何工作的,我可能不得不使用PNGEncoding方法,因为这是唯一一个将集成到我的代码库中的方法。但那里有一个简单的BMP文件版本吗?
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
答案 0 :(得分:2)
有几个开源编码器:
FJCore:http://code.google.com/p/fjcore/
Joe Stegman的PNG编码器:http://blogs.msdn.com/jstegman/archive/2008/04/21/dynamic-image-generation-in-silverlight.aspx
FreeImage:http://freeimage.sourceforge.net/
您可以使用其中任何一种来编码各种格式。这是一篇关于保存WriteableBitmap的帖子:
更新: 在进行了一些搜索之后,由于安全问题,在SL3中将WriteableBitmap保存到文件中似乎是有限的。有一种解决方法:
看起来您必须将Canvas的内容保存到文件中。您应该能够修改样本以保存JPEG或其他格式。
答案 1 :(得分:1)
我之前写的这篇文章介绍了如何使用可写位图,保存对话框和FJCore将XAML保存到位图。
http://blog.blueboxes.co.uk/2009/07/21/rendering-xaml-to-a-jpeg-using-silverlight-3/