2009-09-08 43 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

相關問題