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