WPF BitmapImage - 抛出NotSupportedException的EndInit()

时间:2014-10-16 12:29:56

标签: c# wpf exception bytearray bitmapimage

我必须将 BitmapImage (内部JPEG)转换为byte [] ,然后返回

这是我的代码:

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_BitmapImage EndInit()方法中抛出 NotSupportedException

消息是(用网络翻译翻译):

  

无法找到适合的图像处理组件   完成此操作。

我在互联网上发现了类似的问题,但答案不起作用。通常的答案是“我尝试了你的代码 - 我的一切工作正常。”

我还发现了this suggestion,但没有理解,如何使用它。

感谢您的帮助!

1 个答案:

答案 0 :(得分: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;
    }
}

你试过这个吗?