2014-10-16 240 views
0

我必須轉換BitmapImage的(JPEG內)爲byte []然後WPF BitmapImage的 - EndInit()拋出NotSupportedException異常

這裏是我的代碼:

using System.IO; 
using System.Windows.Media.Imaging; 

public class CImageConverter 
    { 
    // 
    public BitmapImage ByteArray_To_BitmapImage(byte[] _binaryData) 
    { 
     BitmapImage _bitmapImage = new BitmapImage(); 
     // 
     _bitmapImage.BeginInit(); 
     _bitmapImage.CacheOption = BitmapCacheOption.OnLoad; 
     _bitmapImage.StreamSource = new MemoryStream(_binaryData); 
     _bitmapImage.EndInit(); 
     // 
     return _bitmapImage; 
    } 

    // 
    public byte[] BitmapImage_To_ByteArray(BitmapImage _bitmapImage) 
    { 
     byte[] bytes; 
     // 
     using(MemoryStream ms = new MemoryStream()) 
     { 
     JpegBitmapEncoder encoder = new JpegBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(_bitmapImage)); 
     encoder.Save(ms); 
     bytes = ms.ToArray(); 
     } 
     // 
     return bytes; 
    } 
    } 

似乎BitmapImage_To_ByteArray正常工作。

但是ByteArray_To_BitmapImageEndInit()方法投擲NotSupportedException異常

該消息(與翻譯網頁翻譯):

找不到這個圖像處理組件,其適合於 完成此操作。

我在網上發現了類似的問題,但答案不起作用。通常的答案是「我試過你的代碼 - 我有一切正常工作。」

我也發現this suggestion,但沒有明白,怎麼用它。

感謝您的幫助!

+2

其實,你的代碼工作。也許你以某種方式損壞了你傳遞給ByteArray_To_BitmapImage的緩衝區。也就是說,我建議用BitmapSource(基類)替換BitmapImage,以使您的方法更加可用。爲什麼這個醜陋的主角會強調你的一些標識符? – Clemens 2014-10-16 12:56:32

+0

現場進行了轉換(爲什麼我沒有想到這一點?) - 一切順利! 你說得對,問題在於傳輸字節數組。 而醜陋的前導下劃線只是局部變量的標誌:) – 2014-10-16 13:12:10

回答

0
public BitmapImage ToImage(byte[] array) 
{ 
    using (var ms = new System.IO.MemoryStream(array)) 
    { 
    var image = new BitmapImage(); 
    image.BeginInit(); 
    image.CacheOption = BitmapCacheOption.OnLoad; // here 
    image.StreamSource = ms; 
    image.EndInit(); 
    return image; 
    } 
} 

你試過嗎?

+0

是的,做到了。以同樣的方式工作。 – 2014-10-16 13:03:40