我将BitmapImage保存到byte []以保存在DB中。我非常确定数据是否被准确保存和检索,所以这不是问题。
在我的byte []到BitmapImage转换时,我不断收到“System.NotSupportedException异常:找不到适合完成此操作的映像组件。”
任何人都可以在这里看到我的两个功能有什么问题吗?
private Byte[] convertBitmapImageToBytestream(BitmapImage bi)
{
int height = bi.PixelHeight;
int width = bi.PixelWidth;
int stride = width * ((bi.Format.BitsPerPixel + 7) / 8);
Byte[] bits = new Byte[height * stride];
bi.CopyPixels(bits, stride, 0);
return bits;
}
public BitmapImage convertByteToBitmapImage(Byte[] bytes)
{
MemoryStream stream = new MemoryStream(bytes);
stream.Position = 0;
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = stream;
bi.EndInit();
return bi;
}
答案 0 :(得分:0)
这个StackOverflow问题有帮助吗?
byte[] to BitmapImage in silverlight
编辑:
试试这个,不确定它是否会起作用:
public BitmapImage convertByteToBitmapImage(Byte[] bytes)
{
MemoryStream stream = new MemoryStream(bytes);
stream.Position = 0;
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.DecodePixelWidth = ??; // Width of the image
bi.StreamSource = stream;
bi.EndInit();
return bi;
}
更新2:
我找到了这些:
Load a byte[] into an Image at Runtime
BitmapImage from byte[] on a non UIThread
除此之外,我不知道。
答案 1 :(得分:0)
您如何知道您创建的byte []格式是BI在Stream中所期望的?为什么不使用BitmapImage.StreamSource来创建保存的byte []?然后你知道格式是兼容的。
http://www.codeproject.com/KB/vb/BmpImage2ByteArray.aspx
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/8327dd31-2db1-4daa-a81c-aff60b63fee6/
[我没有尝试任何此代码,但你可以]
答案 2 :(得分:0)
原来的bitmapimage CopyPixels不对。我获取bitmapimage的输出并将其转换为可用于本例jpg的东西。
public static Byte[] convertBitmapImageToBytestream(BitmapImage bi)
{
MemoryStream memStream = new MemoryStream();
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bi));
encoder.Save(memStream);
byte[] bytestream = memStream.GetBuffer();
return bytestream;
}