Tina Debove Nigro

Afficher les aperçus photos d'un dossier avec WinRT

Afficher les aperçus photos d'un dossier avec WinRT

Dans cet article, je vais essayer de vous faire gagner du temps. Si vous êtes fatigué et que vous foncez tête baissée sans être concentré sur votre code, vous risquez de faire la même erreur que moi.

Ce que j’ai fait et qu’il ne faut pas faire

Si vous reproduisez le code écrit ci-dessous, soit vous êtes fous ou curieux car je vous ai dit qu’il ne faut pas le faire, soit vous risquez de faire freezer votre machine. Ou les deux.

FileOpenPicker picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".png");
picker.FileTypeFilter.Add(".jpg");
picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
picker.ViewMode = PickerViewMode.Thumbnail;
file = await picker.PickMultipleFilesAsync();

foreach (StorageFile oneFile in file)
{
    var stream = await oneFile.OpenAsync(Windows.Storage.FileAccessMode.Read);
    BitmapImage image = new BitmapImage();
    image.SetSource(stream);
    picsCollection.Add(new PicsItem(image));
}

Le résultat fait peur : je suis monté pour ma part à 1500 Mo de RAM consommés pour 8 photos ajoutées. Cela vient du fait que l’on utilise ici un canon laser pour tuer une mouche. Pourquoi ouvrir un fichier dans sa totalité pour l’afficher en 250x250 dans une GridView ? Inutile.

Ce qu’il faut réellement faire

FileOpenPicker picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".png");
picker.FileTypeFilter.Add(".jpg");
picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
picker.ViewMode = PickerViewMode.Thumbnail;
file = await picker.PickMultipleFilesAsync();

foreach (var filename in file)
{
    var properties = await filename.GetThumbnailAsync(ThumbnailMode.PicturesView, 280, ThumbnailOptions.None);

    BitmapImage image = new BitmapImage();
    image.SetSource(properties);
    picsCollection.Add(new PicsItem { uriSrc = image });
}
picsSelectedFlipView.ItemsSource = picsCollection;

Plus propre, n’est-ce pas ? Ici, on appelle uniquement une miniature (un aperçu de la photo) d’une taille maximale de 280 pixels de côté. C’est amplement suffisant, et surtout, cela consomme environ 50 Mo pour 50 photos prises avec un smartphone.

En espérant avoir aidé certains d’entre vous sur la toile !

Afficher les aperçus photos d'un dossier avec WinRT
Prev post

Convert a string to MD5 on Windows Phone

Next post

A minimized AppBar for Windows 8 similar to Windows 8.1's Mail and Calendar apps

Afficher les aperçus photos d'un dossier avec WinRT

Get in touch