2 votes

Téléchargez et enregistrez une image dans la bibliothèque Images via une application Windows 8 Metro XAML

Je suis en train de développer une application Windows 8 Metro simple qui télécharge simplement un fichier image à partir d'une URL donnée (disons http://sample.com/foo.jpg) et ensuite l'enregistre dans la bibliothèque Images.

J'ai un contrôle d'image dans l'interface utilisateur pour afficher l'image téléchargée. Je rencontre également des difficultés pour définir la source de l'image pour le contrôle d'image sur la nouvelle image téléchargée (en fait, je ne parviens même pas à la télécharger).

Est-il possible de stocker le fichier image dans un dossier particulier de la bibliothèque d'images (si ce dossier n'existe pas, l'application devrait le créer)?

Je suis vraiment bloqué ici.

S'il vous plaît, aidez-moi.

9voto

Jim O'Neil Points 12570

Voici un code approximatif que je pense accomplir ce que vous voulez. Il suppose que vous avez deux contrôles d'image (Image1 et Image2) et que vous avez activé la capacité de la bibliothèque d'images dans le manifeste. Jetez un œil à l'exemple d'images XAML également

        Uri uri = new Uri("http://www.picsimages.net/photo/lebron-james/lebron-james_1312647633.jpg");
        var fileName = Guid.NewGuid().ToString() + ".jpg";

        // télécharger l'image
        var bitmapImage = new BitmapImage();
        var httpClient = new HttpClient();
        var httpResponse = await httpClient.GetAsync(uri);
        byte[] b = await httpResponse.Content.ReadAsByteArrayAsync();

        // créer un nouveau flux en mémoire et un datawriter
        using (var stream = new InMemoryRandomAccessStream())
        {
            using (DataWriter dw = new DataWriter(stream))
            {
                // écrire les octets bruts et stocker
                dw.WriteBytes(b);
                await dw.StoreAsync();

                // définir la source de l'image
                stream.Seek(0);
                bitmapImage.SetSource(stream);

                // définir l'image dans le premier contrôle
                Image1.Source = bitmapImage;

                // écrire dans la bibliothèque d'images
                var storageFile = await KnownFolders.PicturesLibrary.CreateFileAsync(
                    fileName, 
                    CreationCollisionOption.ReplaceExisting);

                using (var storageStream = await storageFile.OpenAsync(FileAccessMode.ReadWrite))
                {
                    await RandomAccessStream.CopyAndCloseAsync(stream.GetInputStreamAt(0), storageStream.GetOutputStreamAt(0));
                }
            }
        }

        // lire depuis la bibliothèque d'images
        var pictureFile = await KnownFolders.PicturesLibrary.GetFileAsync(fileName);
        using ( var pictureStream = await pictureFile.OpenAsync(FileAccessMode.Read) )
        {
            bitmapImage.SetSource(pictureStream);
        }
        Image2.Source = bitmapImage;
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X