【问题标题】:How to save BitmapImage / WriteableBitmap using SaveFileDialog in Silverlight 3.0?如何在 Silverlight 3.0 中使用 SaveFileDialog 保存 BitmapImage / WriteableBitmap?
【发布时间】:2009-09-08 13:42:07
【问题描述】:

如何将 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 属性,它是一个整数像素的一维数组,可以将其放入文件流中吗?如果可以,如何?


这是我的一些示例代码,用于将像素流写入 文件,但是它不会“位图化”数据和 结果输出没用,但它正在写我的图像流,我只是 需要知道如何标记它,使其成为位图文件(或其他任何东西)。 我之前已经找到了 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

【问题讨论】:

  • +1,这是一个非常好的问题。这是否有理由必须来自 BitmapImage?
  • 我的意思是 WritableBitmap,但如果这是必须从 Silverlight 保存图像的方式,则前者适用,但是任何从 Silverlight 保存图像的方法都可以接受

标签: vb.net silverlight stream bitmapimage


【解决方案1】:

那里有几个开源编码器:

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

免费图片: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

更新: 在进行更多搜索之后,由于安全问题,在 SL3 中将 WriteableBitmap 保存到文件似乎受到限制。有一个解决方法:

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

看起来您必须将 Canvas 的内容保存到文件中。您应该能够修改示例以保存 JPEG 或其他格式。

【讨论】:

  • IOW,需要付出相当大的努力,其中我仍然不清楚是否有保存 WritabelBitmap 的解决方案。
  • 他们并不容易。我从一些较早的帖子中得知,这已被确定为 SL3 RC 中的一个问题,并且微软将“尝试”在 RTW 中解决它。我没有看到关于他们是否这样做的任何明确答案,但缺乏任何此类指导让我相信他们没有。
  • 我使用了 FJCore 库,它工作得很好,而且这是我希望的主要格式,事实上可以从图像流式传输到文件 - 即使这是乱码,意味着可能有一种方法——在 Silverlight 4.0 中可能会更好?
  • 我希望他们在 SL.Next 中更容易。这将使 Silverlight 成为一个强大的图像处理平台。
【解决方案2】:

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

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

【讨论】:

  • 这是一个很好的例子,我用它来实际创建使用 FJCore 的另存为代码,忘记发布它,谢谢你这样做,因为它可能会帮助别人,而且它很容易将该代码转换为 VB,这是我用来开发我的应用程序所需的。
猜你喜欢
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多