2016-04-27 14 views
4

Ich schreibe eine App für die Universal Windows Platform, wo ich einige Bilder laden muss, um sie in einer Liste anzuzeigen. Jetzt ist mein Problem, dass dieses Laden für den Benutzer viel zu lange dauert. Ich setze derzeit die Quelle der Bilder in der XAML, mit Bindung, wie folgt: {Binding Image}.UWP App schneller Bildladen?

Ich habe nur Zugriff auf die Bilder mit voller Auflösung, also würde ich gerne wissen, ob es eine Möglichkeit gibt, diese Bilder kleiner zu machen, bevor sie auf der Benutzeroberfläche platziert werden, so dass nur das kleinere Bild im Speicher bleiben muss. Gibt es eine Möglichkeit, ein Image UI-Element so zu konfigurieren, dass es diese Größenänderung selbst durchführt?

Auch gibt es eine Möglichkeit, diese Bilder lazily zu laden, weil jetzt meine UI durch das Laden dieser Bilder blockiert wird.

Edit: Der Code Ich bin mit meinem lokalen Bilder in meinem Image (dies ist innerhalb eines ListView.ItemTemplate) laden:

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

Nicht sicher, ob das hilft - aber vielleicht, anstatt ganze Bilder anzuzeigen, zeigen Sie ihre Thumbnails? – Romasz

+0

Woher bekommst du diese Bilder? Lokal oder online? Tritt die Blockierung auf der Seite auf, oder dauert es sehr lange, diese Bilder zu laden? Wenn das Laden des Bildes sehr lange dauert, hilft Ihnen das vielleicht: https://msdn.microsoft.com/en-us/windows/uwp/threading-async/asynchronous-programming-universal-windows-platform -apps – wuerzelchen

+0

Erstellen Sie BItmapImage oder Binding image url? – Archana

Antwort

2

Sie können faul Last und die Größe der Bilder durch einen Konverter. In ist der Anfang eines Konverters, den Sie verwenden können. Damit ist das Lazy Loading für Sie erledigt. Ich habe jedoch kein Beispiel für die Größenänderung.

Converter Code

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-Code

<Image Source="{Binding Result}" DataContext="{Binding converterObjValue, Converter={StaticResource ConverterName}}"/> 

Für die Resize-Implementierung Sie Informationen finden Sie hier: https://social.msdn.microsoft.com/Forums/en-US/490b9c01-db4b-434f-8aff-d5c495e67e55/how-to-crop-an-image-using-bitmaptransform?forum=winappswithcsharp

+0

Was ist der 'converterObjValue' in der XAML? Und ich kann Größenänderungscode in das "tun Async-Zeug, um das Bild zu füllen", richtig? – vrwim

+0

Der Wert converterObjValue ist das Objekt, das in den Konverter übergeben wird.Ich habe diese Methode verwendet, um die Benutzerinformationen einzugeben, damit ich das Miniaturbild aus dem Internet abrufen konnte. Sie können tatsächlich den Größenänderungscode dort ja –

+0

setzen Das wird mit dem DataContext wie eine normale Bindung binden, oder? (Ich bin nicht sehr fließend in dieser verbindlichen Sache) – vrwim