0

私の XAML には、次のものがあります。

<Image Height="150" HorizontalAlignment="Left" Margin="0,4,0,0" Name="imgLogo" Stretch="Fill" VerticalAlignment="Top" Width="417" />
<Image Height="343" HorizontalAlignment="Left" Margin="0,155,0,0" Name="imgPhoto" Stretch="Fill" VerticalAlignment="Top" Width="417" />

C# のコード ビハインドには、次のものがあります。

WebClient wcForLogo = new WebClient();
wcForLogo.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wcForLogo_DownloadStringCompleted);
wcForLogo.DownloadStringAsync(new Uri("http://mySite/logo.gif"));

WebClient wcForPhoto = new WebClient();
wcForPhoto.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wcForPhoto_DownloadStringCompleted);
wcForPhoto.DownloadStringAsync(new Uri("http://mySite/photo.jpg"));

しかし、画像をキャッチして、作成した XAML コントロールに投稿する方法がわかりません。

2 つの質問:

  1. e.Result を画像コントロールに直接コピーする方法はありますか、または画像をキャッシュしてキャッシュをソースとして使用する必要がありますか、または画像を分離ストレージに保存してそれをソースとして使用してから削除する必要がありますか?終わった時のイメージ?どちらの場合でも、コードで方法を教えていただけますか?
  2. GIF と JPG の扱いは異なりますか? もしそうなら、あなたは私に2つの異なる方法を教えてもらえますか?
4

4 に答える 4

2

画像を表示するだけの場合は、WebClient を使用する必要はありません。Uri を画像ソースに直接設定すると、コントロールがダウンロードを処理します。

imgLogo.Source = new BitmapImage(new Uri("images/yourPicture.png", UriKind.Relative));

GIF は Image コントロールではサポートされていないことに注意してください。ImageTools ライブラリのコンバーターを使用して、引き続きそれらを表示できます: Silverlight を使用して WP7 アプリケーションで GIF を表示する

于 2012-04-24T09:09:55.987 に答える
1
using System.Net;
using System.IO;
        private void Form1_Load(object sender, EventArgs e)
        {
            WebClient webclient = new WebClient();
            webclient.DownloadDataAsync(new Uri("http://mySite/logo.gif"));
            webclient.DownloadDataCompleted += callback;

        }
        void callback(object sender,DownloadDataCompletedEventArgs e)
        {
            var ms = new MemoryStream(e.Result);
            pictureBox1.Image = Image.FromStream(ms);
        }
于 2012-04-24T09:01:23.033 に答える
0

分離ストレージに保存したい場合は、このように使用します

            WebClient m_webClient = new WebClient();

            Uri m_uri = new Uri("http://URL");

            m_webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);

            m_webClient.OpenReadAsync(m_uri);




        }



    void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        int count;

        Stream stream = e.Result;

        byte[] buffer = new byte[1024];


        using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
        {




            using (System.IO.IsolatedStorage.IsolatedStorageFileStream isfs = new IsolatedStorageFileStream("IMAGES.jpg", FileMode.Create, isf))
            {
                count = 0;

                while (0 < (count = stream.Read(buffer, 0, buffer.Length)))
                {
                    isfs.Write(buffer, 0, count);
                }

                stream.Close();
                isfs.Close();
            }
        }

画像フォーム isostore を取得するには:

バイト[] データ;

        using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
        {

            using (IsolatedStorageFileStream isfs = isf.OpenFile(uri, FileMode.Open, FileAccess.Read))
            {
                data = new byte[isfs.Length];
                isfs.Read(data, 0, data.Length);
                isfs.Close();
            }

        }


        MemoryStream ms = new MemoryStream(data);

        BitmapImage bi = new BitmapImage();

        bi.SetSource(ms);

If you give the image name as image then set the source as bi:

        image.source = bi;

直接追加したい場合

  WebClient client = new WebClient();
  Stream stream = client.OpenRead(imageUrl);
  Bitmap bitmap = new Bitmap(stream);
  image.source = bitmap;
于 2012-04-24T08:59:48.610 に答える
0

画像コントロールが と呼ばれているとしましょうMyImage。URL から画像をロードするためにこれを行うことができます:

MyImage.Source = new System.Windows.Media.Imaging.BitmapImage(new Uri("http://mySite/photo.jpg"));

イメージをダウンロードするためだけにすべての配管を行う必要はありません。フレームワークが既にそれを行っています。

于 2012-04-24T09:08:21.557 に答える