2012-08-16 89 views
0

我需要將byte []轉換爲BitmapImage並在WPF圖像控件中顯示它。 (img.Source = ...)。byte []到ImageSource流

,如果我把它轉換是這樣的:

m_photo = new BitmapImage(); 

using (MemoryStream stream = new MemoryStream(photo.ToArray())) 
{ 
    m_photo.BeginInit(); 
    m_photo.StreamSource = stream; 
    m_photo.EndInit(); 
} 

它不能做XAML因爲「m_photo擁有另一個流」結合Source屬性......我該怎麼辦?

+0

您創建了兩個內存流,wth,不是應該是'm_photo.StreamSource = stream;'? – 2012-08-16 00:30:14

+0

這是我的錯:)我只使用一個MemoryStream,當然,只是複製過去的問題..和同樣的問題 – 2012-08-16 00:33:34

+0

@ArtemMakarov我編輯了這個問題,以反映你說的話。 'photo.ToArray()'實際上包含一個編碼位圖圖像(例如PNG)還是它可能是一個像素數組? – Clemens 2012-08-16 06:16:29

回答

1

設置高速緩存選項的OnLoad BeginInit在後

m_photo.CacheOption = BitmapCacheOption.OnLoad; 

編輯:完整代碼BMP數組圖片來源

   DrawingGroup dGroup = new DrawingGroup(); 
       using (DrawingContext drawingContext = dGroup.Open()) 
       { 
        var bmpImage = new BitmapImage(); 
        bmpImage.BeginInit(); 
        bmpImage.CacheOption = BitmapCacheOption.OnLoad; 

        bmpImage.StreamSource = new MemoryStream(photoArray); 
        bmpImage.EndInit(); 
        drawingContext.DrawImage(bmpImage, new Rect(0, 0, bmpImage.PixelWidth, bmpImage.PixelHeight)); 
        drawingContext.Close(); 
       } 
       DrawingImage dImage = new DrawingImage(dGroup); 
       if (dImage.CanFreeze) 
        dImage.Freeze(); 
       imageControl.Source = dImage; 
+0

仍然是一個例外.. – 2012-08-16 03:17:02

+0

什麼異常究竟? – Clemens 2012-08-16 06:10:12

+0

編輯爲您提供您正在嘗試執行的代碼片段。 – LadderLogic 2012-08-16 06:30:35

0

好吧,我剛剛找到解決方案。如果在類的代碼中使用此代碼(將byte []轉換爲bitmapSource) - 您有此錯誤,該對象在另一個流中。但是,如果創建一個Converter(IValueConverter)並使用它與XAML綁定中的轉換代碼相同 - 一切都好!

謝謝大家!