转换的BitmapImage不在页面上显示

时间:2012-07-01 22:10:23

标签: c# image windows-phone-7 xaml rest

我的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并在页面上显示它?我觉得我离这儿很近,但我错过了一些相当基本的东西。

1 个答案:

答案 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);
});