2

WindowsPhoneアプリケーションに問題があります。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 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としてbyte []を受け取り、それをページに表示するにはどうすればよいかということです。私はここにかなり近いように感じますが、かなり初歩的な何かが欠けています。

4

1 に答える 1

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);
});
于 2012-07-02T01:22:06.053 に答える