2015-03-31 83 views
3

有沒有辦法將ImageSource對象轉換爲字節數組? 我有一個ImageSource對象綁定到一個WPF窗口,我可以從數據庫轉換一個字節數組並將其轉換爲ImageSource,但我不能以相反的方式做到這一點。將System.Windows.Media.ImageSource轉換爲ByteArray

Thx提前。

編輯:我試圖將ImageSource轉換爲BitmapImage,但得到一個空對象。

+0

檢查:

所以,如果您的ImageSource實際上是一個的BitmapSource(而不是DrawingImage或D3DImage),下面的方法通過使用指定的BitmapEncoder(如PngBitmapEncoder)將其轉換爲一個字節數組該屬性FileBytes – 2015-03-31 23:43:57

+0

嗨,沒有這樣的屬性。 – 2015-03-31 23:49:31

+0

您現在嘗試使用的代碼是什麼? – 2015-04-01 01:31:18

回答

7

即使你的ImageSource不是一個BitmapImage的,你還可以成功地將其轉換爲BitmapSource,這是基類的所有WPF位圖類,如BitmapImage的,BitmapFrame,WriteableBitmap的,RenderTargetBitmap等(見here)。

public byte[] ImageSourceToBytes(BitmapEncoder encoder, ImageSource imageSource) 
{ 
    byte[] bytes = null; 
    var bitmapSource = imageSource as BitmapSource; 

    if (bitmapSource != null) 
    { 
     encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); 

     using (var stream = new MemoryStream()) 
     { 
      encoder.Save(stream); 
      bytes = stream.ToArray(); 
     } 
    } 

    return bytes; 
} 
+0

Thx它工作正常:)。 – 2015-04-01 09:53:17

+0

調用此函數時,我應該在編碼器字段中傳遞什麼信息。 – SANDEEP 2016-02-03 14:53:23

+0

@SANDEEP正如答案中提到的:「例如PngBitmapEncoder」。 – Clemens 2016-02-03 14:58:40