2011-08-04 17 views
1

画像にオンラインのリンクがあり、画像ソースをこのURIに設定したい場合、どうすればよいですか?私が試しているコードを以下に示します。
また<Image Name="Poster" Height="400" Width="250" VerticalAlignment="Top" Margin="0,10,8,0"/>画像ソースをURIに設定する

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

、私はこれがどのように行われるか、再びそれをロードするために、この画像をキャッシュしたい場合は?
ありがとう

答えて

5

これは正しい方法です。後で再利用できるようにイメージをキャッシュしたい場合は、いつでもIsolated Storageにダウンロードできます。 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; 
} 
+0

私はこれを実行すると私は言った例外を取得:ので 相対URIを作成することはできません'uriString'パラメータは、絶対URIを表します。 – Ameen

+0

あなたはどんなURIを渡していますか、どこに例外がスローされますか? –

+0

これは私が渡しているURLです: 'http://www.foo-web.net/res2/Adele Blanc - Sec.foob' 例外は次の文で発生します: ' imgSource.UriSource = new Uri(movie.B_Poster、UriKind.Relative); ' – Ameen

1

イメージをキャッシュするには、ローカルファイルストアにWebClient(最も簡単)またはWebRequest - WebResponseメカニズムを使用してイメージをダウンロードします。次に、イメージの場所を設定するために次に移動するときに、ローカルに存在するかどうかを確認します。その場合は、ローカルファイルに設定します。そうでない場合は、リモートファイルに設定してダウンロードします。

PS。これらのファイルを追跡して古いファイルを削除する必要があります。そうしないと、電話のメモリが非常に早くいっぱいになります。

0

コードビハインドでイメージソースを設定する方法はまったく問題ありません。他の選択肢は、あなたが結合/ 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(); 
    } 
} 
関連する問題