2011-11-28 65 views
0

我已經tryed這一點,但有例外 - 操作無法的Valide由於對象時,我試圖怎樣的byte []轉換成BitmapFrame C#

return backconvertor(buff); 

private BitmapFrame backconvertor(byte[] incomingBuffer) 
    { 
     BitmapImage bmpImage = new BitmapImage(); 
     MemoryStream mystream = new MemoryStream(incomingBuffer); 
     bmpImage.StreamSource = mystream; 
     BitmapFrame bf = BitmapFrame.Create(bmpImage); 
     return bf; 
    } 

誤差上漲的當前狀態

在其他功能(BUFF - 準備好了!)

+1

哪一行會拋出異常? –

+0

BitmapFrame bf = BitmapFrame.Create(bmpImage); – curiousity

+0

看看這裏http://imagetools.codeplex.com/ –

回答

2

文件表明,爲了初始化圖像,你需要BeginInit和之間做10。那就是:

bmpImage.BeginInit(); 
bmpImage.StreamSource = mystream; 
bmpImage.EndInit(); 

或者,您可以流傳遞給構造函數:

bmpImage = new BitmapImage(mystream); 

爲例和BeginInit更多的討論參見http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.begininit.aspx

+0

仍然錯誤((「沒有找到此操作的成像組件」在bmpImage.EndInit();行 – curiousity

+0

即使我從CopyPixels粘貼緩衝區( – curiousity

+1

@curiousity:當然,如果你使用CopyPixels,那麼這個方法不會複製BitmapImage期望的任何元信息,BitmapImage需要一個帶有文件格式頭的完全編碼流。 –

0

這是我有一個WPF轉換器來處理字節BitmapFrame和它完美的作品:

  var imgBytes = value as byte[]; 
      if (imgBytes == null) 
       return null; 
      using (var stream = new MemoryStream(imgBytes)) 
      { 
       return BitmapFrame.Create(stream, 
        BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 
      } 

也是它的線程安全的,因爲我已經在Task.Run使用它之前也。

相關問題