【发布时间】:2014-11-24 17:57:20
【问题描述】:
我有一个 ListView 项目,其中包含来自 http GET 请求的数据和图像。我可以在 ListView 中显示除图片之外的所有数据。为了获取图像,我必须发出单独的 http GET 请求。我可以使用此代码显示图像:
private async void DisplayPicture()
{
var ims = new InMemoryRandomAccessStream();
var dataWriter = new DataWriter(ims);
dataWriter.WriteBytes(App.answer.picture);
await dataWriter.StoreAsync();
ims.Seek(0);
BitmapImage bitmap = new BitmapImage();
bitmap.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
bitmap.SetSource(ims);
}
但是,如果我想在带有绑定的 ListView 中使用,这不起作用。 这是我尝试过的代码:
public class BinaryToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value != null && value is byte[])
{
var bytes = value as byte[];
var ims = new InMemoryRandomAccessStream();
var dataWriter = new DataWriter(ims);
dataWriter.WriteBytes(bytes);
//await dataWriter.StoreAsync();
ims.Seek(0);
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(ims);
//var ims = new MemoryStream(bytes);
//var image = new BitmapImage();
//image.SetSource(stream);
//stream.Close();
return bitmap;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
主要问题是我从服务器获取byte[](bytearray)中的图片,只有上面的代码才能在WP8.1上显示。所以我必须使用dataWriter.StoreAsync()方法,但是如果我使用它,我必须使用async,它必须是无效的。但是由于绑定,void返回值对我不利。
你可以看到我未注释的原始代码,但我不能使用它,因为image.SetSource() 的输入值必须是随机访问流。所以我不知道如何解决这个问题。
【问题讨论】:
-
您只是从网上下载图像文件吗?或者那个字节流来自网络服务并且有点独特?
-
这是一个用户头像,我可以通过这个网址访问:myapi.mywebpage.com/Image/Downloadavatar?Email=user@example.com 所以它来自一个网络服务,每个 ListView 项目都包含一张独特的图片。图片下载可能需要较长时间,但我稍后会尝试解决。
-
jpg? ? gif? Base64 编码?其他的?
标签: image listview data-binding windows-phone-8.1 httpclient