2014-01-14 53 views
1

如何將一個WriteableBitmap轉換爲Silverlight5中的BitmapImage對象?如何將WriteableBitmap轉換爲Silverlight5中的BitmapImage對象?

到目前爲止,這裏是我嘗試將WriteableBitmap轉換爲BitmapImage;但是,它不起作用。

不會拋出異常,所產生的BitmapImage只是一個沒有數據的'空'對象;既PixelHeight和PixelWidth爲零:

public BitmapImage Convert(WriteableBitmap wb) 
{ 
    int[] p = wb.Pixels; 
    int len = p.Length * 4; 
    byte[] result = new byte[len]; 
    Buffer.BlockCopy(p, 0, result, 0, len); 

    MemoryStream ms = new MemoryStream(result); 

    BitmapImage bi = new BitmapImage(); 
    bi.SetSource(ms); 

    // bi.PixelHeight and bi.PixelWidth are zero. 

    return bi; // pretty much an empty image. 
} 

跨張貼在這裏:http://social.msdn.microsoft.com/Forums/silverlight/en-US/0a0c833b-8e68-4c8d-871a-d0805d84ba16/writeablebitmap-to-bitmapimage?forum=silverlightpivotviewer

+0

是否有任何特定的原因,你想從'WriteableBitmap'轉換爲'BitmapImage'?兩者都是'BitmapSource'的子類,因此可以通過'Image.Source'分配給例如'Image'元素。 –

+0

Anders,這就是爲什麼我需要BitmapImage:Silverlight5 PivotViewer控件只接受綁定到BitmapImage對象以顯示其「瓦片」。 – user3023876

回答

1

總結您交叉張貼的討論:

是的,你有你的圖像轉換成任何PNG或JPG創建一個BitmapImage

BitmapImage預計是一個編碼圖像文件,但從WriteableBitmap得到的字節是一個未壓縮的原始ARGB像素格式。

爲了生成一個PNG或JPG格式,你必須使用任何一個鏈接來處理可以做到這一點的庫,或者使用Stegman的一頁png編碼器(實際上並不壓縮任何東西)。

既然您已經在論壇上提出了這個建議,但是您注意到鏈接已損壞,我從本地複製了一個公開gist on github

+0

約翰,謝謝你的鏈接;我進一步讚賞你是如何解釋潛在的問題的。 – user3023876

相關問題