2012-04-24 3 views
0

В моем XAML, у меня есть:WebClient Загрузить JPG и GIF изображения

<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 непосредственно к элементам управления Image, или я должен кэшировать изображение и использовать кэш-память в качестве источника, или я должен сохранить изображение изолированное хранилище, а затем использовать это как источник, а затем удалить изображение, когда я закончил с ним? Какой бы случай, не могли бы вы показать мне, как с кодом?
  2. Разработаны ли GIF и JPG по-разному? Если да, можете ли вы показать мне два разных способа?

ответ

2

Если вы просто хотите отобразить изображение, вам не нужно использовать WebClient. Вы можете установить Uri непосредственно в источнике изображения, и управление будет заботиться о скачивании:

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

Обратите внимание, что GIF не поддерживается контролем изображения. Вы можете отображать их с помощью конвертера из библиотеки ImageTools: Display GIF in a WP7 application with Silverlight

+0

Большое спасибо за ссылку! Это оказалось лучшим ответом, так как я не уверен, какой формат изображения получат изображения, поэтому я следую советам одной из сообщений в блоге, которые вы использовали, и предложили использовать браузер. –

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; 
+0

Спасибо за отличный отклик! Это будет отличная ссылка, чтобы вернуться к IsolStorage, но я решил пойти с более простым решением, так как я бы предпочел не сохранять изображение. Мне нравится +1 ваш пост, но у меня нет репутации для этого. Спасибо хоть. : D –

+0

Какой ответ вы ожидаете, что вы попросили здесь получить изображение с веб-url, но вы отметите как ответ на ответ для получения изображения из локального контента. Это не хорошо –

+0

Если вы не просили указать URL-адрес веб-сайта, тогда задайте вопрос, как этот человек меняет формат вашего вопроса, задавая –

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); 
     } 
+0

Спасибо за ответ, но ответы других были намного полезнее. Я бы хотел, чтобы +1 ваш пост для правильного ответа в любом случае, но у меня нет такой репутации. Спасибо хоть. : D –

0

Допустим контроль ваш образ называется MyImage, вы можете просто сделать это, чтобы загрузить изображение из URL:

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

Не нужно делать всю сантехнику только для загрузки изображения, рамки уже делают это для вас!

+0

Ваше решение сработало бы лучше для меня, чем выбранный ответ, но он добавил ссылку о работе с GIF, что немаловажно. Мне нравится +1 ваш пост, но у меня нет репутации для этого. Спасибо хоть. : D –

+0

Без проблем @ Али, я рад, что у вас решена ваша проблема! :) –