Vb.net 如何在Silverlight 3.0中使用SaveFileDialog保存BitmapImage/WriteableBitmap?
Silverlight的WriteableBitmap如何保存到文件系统中,我不确定如何使用FileStream使其工作,它可以是位图、PNG、Jpeg格式等,只要不需要商业库。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
有可能这样做吗 下面是我对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非常容易,这正是我用来开发我的应用程序所需要的。