Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何在Silverlight 3.0中使用SaveFileDialog保存BitmapImage/WriteableBitmap?_Vb.net_Silverlight_Stream_Bitmapimage - Fatal编程技术网

Vb.net 如何在Silverlight 3.0中使用SaveFileDialog保存BitmapImage/WriteableBitmap?

Vb.net 如何在Silverlight 3.0中使用SaveFileDialog保存BitmapImage/WriteableBitmap?,vb.net,silverlight,stream,bitmapimage,Vb.net,Silverlight,Stream,Bitmapimage,Silverlight的WriteableBitmap如何保存到文件系统中,我不确定如何使用FileStream使其工作,它可以是位图、PNG、Jpeg格式等,只要不需要商业库。 有可能这样做吗 下面是我对SaveDialog的调用: Dim SaveDialog As New SaveFileDialog If SaveDialog.ShowDialog Then Try Using FileStream As Stream = Save

Silverlight的WriteableBitmap如何保存到文件系统中,我不确定如何使用FileStream使其工作,它可以是位图、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
编辑

添加了可写位图,因为这是我的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

有几种开源编码器:

福建省:

Joe Stegman的PNG编码器:

FreeImage:

您可以使用其中任何一种来编码各种格式。下面是一篇关于烘焙后保存WriteableBitmap的帖子:

更新: 在进行更多搜索之后,由于安全问题,似乎SL3限制了将可写位图保存到文件。有一个解决办法:


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

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


+1,这是一个非常好的问题。有没有一个原因必须来自BitmapImage?我是说WritableBitmap,但是如果这是从Silverlight保存图像的方式,则前者适用,但是从Silverlight保存图像的任何方法都可以接受,我们需要付出相当大的努力,在这些努力中,我仍然不清楚是否有一个解决方案可以保存WriteAbelBitmap。我从一些老帖子中得知,这在SL3RC中被确定为一个问题,微软打算“尝试”在RTW中解决它。我没有看到任何关于他们是否这样做的明确答案,但是缺乏任何这样的指导让我相信他们没有。我使用FJCore库,它工作得很好,加上这是我希望的主要格式,事实上可以从图像流到文件-即使这是jibberish,这意味着可能有一种方法-在Silverlight 4.0中可能更好?我真的希望他们能让SL.Next变得更简单。这将使Silverlight成为一个强大的图像处理平台。这是一个很好的例子,我用它实际创建了使用FJCore的“另存为”代码,忘了发布它,感谢您这么做,因为它可能会帮助其他人,而且将该代码转换为VB非常容易,这正是我用来开发我的应用程序所需要的。