Установить источник изображения в URI - PullRequest
1 голос
/ 04 августа 2011

Если у меня есть ссылка на изображение в Интернете, и я хочу установить источник изображения для этого URI, как я должен сделать это лучше всего?Код, который я пытаюсь показать, показан ниже.
<Image Name="Poster" Height="400" Width="250" VerticalAlignment="Top" Margin="0,10,8,0"/>

BitmapImage imgSource = new BitmapImage();<br> imgSource.UriSource = new Uri(movie.B_Poster, UriKind.Relative);<br> Poster.Source = imgSource;

Кроме того, если я хочу кэшировать это изображение, чтобы загрузить его снова, как это делается?
Спасибо

Ответы [ 3 ]

5 голосов
/ 04 августа 2011

Это правильный способ сделать это.Если вы хотите кэшировать изображение для последующего повторного использования, вы всегда можете загрузить его в изолированное хранилище.Используйте WebClient с OpenReadAsync - передайте URI изображения и сохраните его локально.

WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
client.OpenReadAsync(new Uri("IMAGE_URL"));

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication();

    using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("image.jpg", System.IO.FileMode.Create, file))
    {
        byte[] buffer = new byte[1024];
        while (e.Result.Read(buffer, 0, buffer.Length) > 0)
        {
            stream.Write(buffer, 0, buffer.Length);
        }
    }
}

Считайте, что это будет наоборот:

using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("image.jpg", System.IO.FileMode.Open, file))
{
    BitmapImage image = new BitmapImage();
    image.SetSource(stream);

    image1.Source = image;
}
1 голос
/ 04 августа 2011

Вы сделали это правильно.

Чтобы кэшировать изображение, вы должны загрузить его в локальное хранилище файлов с помощью WebClient (самый простой) или с помощью механизма WebRequest - WebResponse. Затем, в следующий раз, когда вы установите положение изображения, проверьте, существует ли оно локально. Если это так, установите его в локальный файл. Если нет, установите его для удаленного файла и загрузите.

PS. Вам необходимо отслеживать их и удалять старые файлы, иначе вы очень быстро заполните память телефона.

0 голосов
/ 04 августа 2011

То, как вы устанавливаете источник изображения в коде позади, абсолютно нормально. Другой альтернативой, если вы используете связывание / MVVM, является преобразование строкового URL в источник изображения с помощью конвертера:

public class StringToImageConverter : IValueConverter
{

  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    string url = value as string;
    Uri uri = new Uri(url);
    return new BitmapImage(uri);
  }

  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    throw new NotImplementedException();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...