【发布时间】: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_BitmapImage 在 EndInit() 方法中抛出 NotSupportedException。
消息是(用网络翻译翻译的):
找不到适合的图像处理组件 完成此操作。
我在互联网上找到了类似的问题,但答案不起作用。通常的答案是“我试过你的代码 - 我一切正常。”
我也找到了this suggestion,但是不明白,怎么用。
感谢您的帮助!
【问题讨论】:
-
实际上,您的代码有效。也许您以某种方式损坏了传递给 ByteArray_To_BitmapImage 的缓冲区。也就是说,我建议将 BitmapImage 替换为 BitmapSource (基类),以使您的方法更可用。为什么你的一些标识符上有这个丑陋的前导下划线?
-
当场进行转换(为什么我没有想到这一点?) - 一切顺利!你是对的,问题出在传输字节数组中。丑陋的前导下划线只是局部变量符号:)
-
我曾经被那些东西卡住了。对我来说,“找不到适合完成此操作的图像处理组件”只是目标图像是 0Mb 文件或已损坏。该代码在其他情况下工作正常
标签: c# wpf exception bytearray bitmapimage