我已经解决这个问题有一段时间了。我从数据库中以 byte[] 形式获取图像,我想将其转换为 WritableBitmap,以便我可以使用绑定将其显示在我的 xaml 页面上。
我正在使用这个:
public class ImageConverter : IValueConverter
{
/// <summary>
/// Converts a Jpeg byte array into a WriteableBitmap
/// </summary>
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is byte[])
{
MemoryStream stream = new MemoryStream((Byte[])value);
WriteableBitmap bmp = new WriteableBitmap(200, 200);
bmp.LoadJpeg(stream);
return bmp;
}
else
return null;
}
/// <summary>
/// Converts a WriteableBitmap into a Jpeg byte array.
/// </summary>
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
第一个问题是它不起作用。当它命中时它会抛出一个未指定的异常bmp.LoadJpeg(stream);
第二个问题是关于传递给 WriteableBitmap 构造函数的固定大小,我如何知道来自数据库的照片的大小?我可以让它动态起来吗?我想第二个问题就是第一个问题的原因。
Thanks.
EDIT
我也尝试过使用PictureDecoder.DecodeJpeg()
像这样:
MemoryStream stream = new MemoryStream((Byte[])value);
WriteableBitmap bmp = PictureDecoder.DecodeJpeg(stream);
return bmp;
但它也不起作用。在这种情况下PictureDecoder.DecodeJpeg
假设为我创建 bmp 对象。我仍然收到未指定的错误。难道是我超过了流允许的最大长度?