Я уже давно занимаюсь этой проблемой. Я получаю изображение из моей БД в виде байта [] и хочу преобразовать его в 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. Как я могу узнать размер фотографии, поступающей из БД? я могу сделать это как-то динамически? Я думаю, что вторая проблема является причиной первой.
Спасибо.
EDIT
Я также пытаюсь использовать PictureDecoder.DecodeJpeg()
вот так:
MemoryStream stream = new MemoryStream((Byte[])value);
WriteableBitmap bmp = PictureDecoder.DecodeJpeg(stream);
return bmp;
но это тоже не сработало. в этом случае PictureDecoder.DecodeJpeg
предположим, что я создаю объект bmp. Я все еще получаю неуказанную ошибку. Может ли быть так, что я передал максимальную длину, разрешенную для потока?