将图像源设置为URI

本文关键字:URI 设置 图像 | 更新日期: 2023-09-27 18:04:42

如果我有一个链接到网上的图像,我想把图像源设置为这个uri,我应该怎么做最好?我正在尝试的代码如下所示。
<Image Name="Poster" Height="400" Width="250" VerticalAlignment="Top" Margin="0,10,8,0"/>

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

另外,如果我想缓存这个图像再次加载它是如何做到的?
由于

将图像源设置为URI

这才是正确的做法。如果您希望缓存映像以供以后重用,则始终可以在隔离存储中下载它。使用WebClientOpenReadAsync -传递图像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;
}

你做对了。

要缓存图像,您可以使用WebClient(最简单)或使用WebRequest - WebResponse机制将其下载到本地文件存储。然后,下次您去设置图像位置时,检查它是否存在于本地。如果是,请将其设置为本地文件。如果不是,设置为远程文件并下载。

p。你需要跟踪这些文件并删除旧文件,否则你会很快填满手机的内存。

在代码隐藏中设置图像源的方式绝对是好的。如果使用binding/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();
  }
}