我的Windows Phone应用程序出现问题。当我从Web服务获取照片时,我想将其显示为页面上的图像。 Web服务返回byte []作为图像数据。
Dispatcher.BeginInvoke(() =>
{
tempImage = new BitmapImage();
globalWrapper = (PhotoWrapper)JsonConvert.DeserializeObject(
response.Content, typeof(PhotoWrapper));
tempImage.SetSource(new MemoryStream(globalWrapper.PictureBinary, 0,
globalWrapper.PictureBinary.Length));
globalWrapper.ImageSource = tempImage;
PictureList.Items.Add(globalWrapper);
});
PictureList是ListBox,定义为:
<ListBox Name="PictureList" ItemsSource="{Binding}" Margin="0,0,0,0">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Button Click="details_Click">
<Button.Content>
<Image Source="{Binding ImageSource}"></Image>
</Button.Content>
</Button>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
现在,我的问题是,你如何从Web服务接收一个字节[]作为JSON并在页面上显示它?我觉得我离这儿很近,但我错过了一些相当基本的东西。
答案 0 :(得分:0)
如果您确定byte []数据有效,则可能与BitmapUmage的CacheOption属性有关。此属性控制何时将数据实际从流加载到位图中。默认值为OnDemand,仅在显示图像时从流中加载数据。您可能希望尝试使用OnLoad选项,它会立即加载它,允许您关闭流。
Dispatcher.BeginInvoke(() =>
{
globalWrapper = (PhotoWrapper)JsonConvert.DeserializeObject(
response.Content, typeof(PhotoWrapper));
tempImage = new BitmapImage();
tempImage.BeginInit();
tempImage.CacheOption = BitmapCacheOption.OnLoad;
tempImage.SetSource(new MemoryStream(globalWrapper.PictureBinary, 0,
globalWrapper.PictureBinary.Length));
tempImage.EndInit();
globalWrapper.ImageSource = tempImage;
PictureList.Items.Add(globalWrapper);
});