【问题标题】:WPF BitmapImage - EndInit() throwing NotSupportedExceptionWPF BitmapImage - EndInit() 抛出 NotSupportedException
【发布时间】:2014-10-16 12:29:56
【问题描述】:

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

这是我的代码:

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,但是不明白,怎么用。

感谢您的帮助!

【问题讨论】:

  • 实际上,您的代码有效。也许您以某种方式损坏了传递给 ByteArray_To_BitmapImage 的缓冲区。也就是说,我建议将 BitmapImage 替换为 BitmapSource (基类),以使您的方法更可用。为什么你的一些标识符上有这个丑陋的前导下划线?
  • 当场进行转换(为什么我没有想到这一点?) - 一切顺利!你是对的,问题出在传输字节数组中。丑陋的前导下划线只是局部变量符号:)
  • 我曾经被那些东西卡住了。对我来说,“找不到适合完成此操作的图像处理组件”只是目标图像是 0Mb 文件或已损坏。该代码在其他情况下工作正常

标签: c# wpf exception bytearray bitmapimage


【解决方案1】:
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;
    }
}

你试过了吗?

【讨论】:

  • 是的,做到了。以同样的方式工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多