2009-09-08 60 views
3

如何将Silverlight的WriteableBitmap保存到文件系统中,我不确定如何使用FileStream来完成此项工作,只要不需要商业库,就可以使用Bitmap,PNG,Jpeg格式等。 。
可以做到这一点吗?如何在Silverlight 3.0中使用SaveFileDialog保存BitmapImage/WriteableBitmap?

这是我的呼吁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属性,它是一个整数像素的一维数组,可以将它放入文件流中吗?如果是这样,怎么办?


下面是一些示例代码,我有一个象素流写入到 文件,但这个工程并不“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

+1,这是一个非常好的问题。这是否有一个原因来自BitmapImage? – AnthonyWJones 2009-09-08 14:01:39

+0

我的意思是WritableBitmap,但前者适用,如果这是他们的方式必须从Silverlight保存图片,但是任何从Silverlight保存图片的方法都可以接受 – RoguePlanetoid 2009-09-08 14:08:01

回答

2

这里有几个开源编码器,在那里:

FJCore:http://code.google.com/p/fjcore/

乔Stegman的PNG编码器:http://blogs.msdn.com/jstegman/archive/2008/04/21/dynamic-image-generation-in-silverlight.aspx

的FreeImage:http://freeimage.sourceforge.net/

您可以使用任何这些来编码各种格式。下面是关于一旦它的烤保存WriteableBitmap的一个帖子:

http://community.irritatedvowel.com/blogs/pete_browns_blog/archive/2009/03/18/Silverlight-3-1320-The-Bitmap-API-2F00-WriteableBitmap.aspx

UPDATE: 做一些更多的搜索,它看起来像保存WriteableBitmap的一个文件中SL3是有限的,由于安全问题之后。有一种变通方法:

http://geekswithblogs.net/braulio/archive/2009/07/12/export-canvas-to-png-and-save-it-in-your-local.aspx

看起来你有一个画布的内容保存到一个文件中。您应该可以修改样本以保存JPEG或其他格式。

+0

IOW,需要付出相当大的努力,仍然不清楚存在保存WritabelBitmap的解决方案。 – AnthonyWJones 2009-09-08 16:48:21

+0

他们并不容易。我从一些较旧的帖子中收集到,这被认为是SL3 RC中的一个问题,并且微软将“尝试”在RTW中解决它。我没有看到他们是否有任何明确的答案,但缺乏这样的指导使我相信他们没有。 – 2009-09-08 19:09:17

+0

我使用了FJCore库,它工作得很好,再加上这是我期望的主要格式,事实上它可以从图像流到文件 - 即使这是乱码,也意味着可能有一种方式 - 在Silverlight 4.0中可能会更好? – RoguePlanetoid 2009-09-08 19:29:30

1

我以前写过这篇文章,讲述了如何使用可写位图,保存对话框和FJCore将XAML保存到位图。

http://blog.blueboxes.co.uk/2009/07/21/rendering-xaml-to-a-jpeg-using-silverlight-3/

+0

这是一个很好的例子,我用它来实际创建使用FJCore的另存为代码,忘记发布它,谢谢你这样做,因为它可以帮助其他人,再加上它很容易转换为VB代码是我用来开发我的应用程序,这是需要的。 – RoguePlanetoid 2009-09-14 09:08:28

相关问题