0

私のアプリには、特定の画像をプリロードする必要があるコンポーネントがあります。私の考えでは、Webからすべての画像をビットマップオブジェクトにダウンロードしてから、それらを画像のソースとして使用する必要があります。これを行う最も簡単な方法は何ですか?すでに画像をダウンロードするためのコードを少し書いていますが、複数の画像では機能しないようです。

 HttpClient client = new HttpClient();
        NetResult result;

        try
        {

            Debug.WriteLine("Starting call to " + Url);
            HttpResponseMessage response = await client.GetAsync(Url);
            response.EnsureSuccessStatusCode();
            result = await this.processContent(response.Content);

        }
        catch (Exception e) 
        {

            Debug.WriteLine(e.Message);
            Debug.WriteLine("Unable to load " + Url);
            result = new NetResult(NetResultStatus.Failure, "Could not connect to " + Url + ".");

}

..。

ProcessContentは次のように機能します。

public override async Task<NetResult> processContent(HttpContent content)
    {

        InMemoryRandomAccessStream randomAccessStream = null;

        if (content != null && !Constants.FakeInternet)
        {
            byte[] img = await content.ReadAsByteArrayAsync();
            // Transform to a stream
            randomAccessStream = new InMemoryRandomAccessStream();
            DataWriter writer = new DataWriter(randomAccessStream.GetOutputStreamAt(0));
            writer.WriteBytes(img);
            await writer.StoreAsync();
        }

        _m = new ManualResetEvent(false);

        (Application.Current as App).UIDispatcher.DispatchAsync(() =>
            {


                    // Create bitmap image
                    image = new BitmapImage();

                    NetImage i = (NetImage)this;

                    Debug.WriteLine("Creating Image " + Url);
                    image.ImageFailed += ImageFailed;
                    image.ImageOpened += ImageOpened;
                    image.SetSource(randomAccessStream);


            });

        _m.WaitOne();


        return await base.processContent(content);

    }

    void ImageOpened(object sender, Windows.UI.Xaml.RoutedEventArgs e)
    {

        Debug.WriteLine("Image opened: " + Url);
        _m.Set();

    }

    void ImageFailed(object sender, Windows.UI.Xaml.ExceptionRoutedEventArgs e)
    {

        Debug.WriteLine("Image failed: " + Url);
        image = null;
        ConnectionState = ConnectionState.Failed;
        _m.Set();

    }

PNGをネットからビットマップオブジェクトにダウンロードするために使用できる組み込みAPIはありますか?厄介なことの1つは、UIスレッドでビットマップをデコードする必要があることだと思います...これはなぜですか?

4

1 に答える 1

0

PNGをダウンロードしてBitmapImageを作成する手順をいくつか節約できるWinRTAPIを知りません。それは存在しないという意味ではありません。

XAMLイメージサンプルのシナリオ4を確認すると役立つ場合があります。バックグラウンドスレッドでフラクタルを非同期的に計算し、その結果をWriteableBitmapに表示します。これにより、UIスレッドから抜け出します。

于 2013-01-11T18:18:43.893 に答える