2016-04-27 14 views
4

私はUniversal Windows Platform用のアプリケーションを作成しています。ここでは、リストに表示する画像を読み込む必要があります。今、私の問題は、この読み込みがユーザーにとって長すぎるということです。私は現在XAMLの画像のソースをバインディングを使って設定しました。つまり、{Binding Image}です。UWPアプリの画像読み込み速度が向上しますか?

私はフル解像度の画像にしかアクセスできませんので、UIに配置する前にこれらの画像を小さくする方法があるかどうかを知りたいので、小さな画像だけをメモリに残す必要があります。 Image UI要素を構成して、このサイズ変更自体を実行する方法はありますか?

また、これらの画像を読み込むことによってUIがブロックされるため、これらの画像を遅延読み込みする方法はありますか。

編集:私は私のImageに私のローカルイメージをロードするために使用していたコード(これはListView.ItemTemplateの内側にある):

<Image 
    Grid.Row="0" 
    Source="{Binding Image}" 
    Stretch="Uniform" 
    VerticalAlignment="Center"/> 
+0

画像全体を表示するのではなく、サムネイルを表示するかどうかはわかりませんか? – Romasz

+0

どこからこれらの画像を取得しますか?ローカルまたはオンラインですか?ブロックはUI側で行われますか、またはこれらの画像をロードするのに非常に時間がかかりますか?画像の読み込みに非常に時間がかかる場合は、おそらくこれが役に立ちます:https://msdn.microsoft.com/en-us/windows/uwp/threading-async/asynchronous-programming-universal-windows-platform -apps – wuerzelchen

+0

BItmapImageまたはBinding image urlを作成していますか? – Archana

答えて

2

することができます怠惰な負荷とコンバータを用いて画像のサイズを変更します。 Inは、使用できるコンバータの開始点です。これにより、あなたのために怠惰な読み込みが行われます。私はしかし、サイズの例を準備していない。サイズ変更を実装するための

コンバーターコード

class LoadAttachmentAsyncConverter : IValueConverter 
{ 
    public override object Convert(object value, Type targetType, object parameter, string language) 
    { 
     Task<BitmapImage> taskToExecute = GetImage(<some parameter>); 
     //Possibly handle some other business logic 
     return new NotifyTaskCompletion<BitmapImage>(taskToExecute); 
    } 

    public async Task<BitmapImage> GetImage(object someParameter) { 
     BitmapImage image = new BitmapImage(); 
     //do (async stuff) to fill the image; 
     return image; 
    } 
} 

XAMLコード

​​

あなたはここで情報を見つけることができます:https://social.msdn.microsoft.com/Forums/en-US/490b9c01-db4b-434f-8aff-d5c495e67e55/how-to-crop-an-image-using-bitmaptransform?forum=winappswithcsharp

+0

XAMLの 'converterObjValue'とは何ですか?そして、私は "イメージを埋めるために非同期のものを行う"というコードのサイズを変更することができます。 – vrwim

+0

converterObjValueはコンバータに渡されるオブジェクトです。このメソッドを使用してユーザー情報を渡したので、インターネットからサムネイルを取得できました。 実際にそこにサイズ変更コードを入れることができます。 –

+0

これは通常のBindingのようにDataContextにバインドされますか? (私はこの拘束力のあるものに流暢ではない) – vrwim

1

をまた、あなたのVMで遅延ロードを行うことができます。

// You can also use BitmapImage directly, if you'd like to make reloading faster and don't care memory usage. 
    private WeakReference<BitmapImage> image; 

    public BitmapImage Image 
    { 
     get 
     { 
      BitmapImage image; 
      if(this.image != null && this.image.TryGetTarget(out image)) 
       return image; 
      image = new BitmapImage(); 
      this.image = new WeakReference<BitmapImage>(image); 
      var ignore = Task.Run(()=> 
      { 
       //Load image here. 
       //Don't forget to use Dispatcher while calling SetSourceAsync() or setting Source. 
      }); 
      return image; 
     } 
    } 
関連する問題