Windows Phone 7 tra le sue caratteristiche principali annovera la centralizzazione delle informazioni mediante gli hub delle persone, della musica e delle immagini. Questo permette all'utente di avere un unico punto dove visualizzarle, gestirle e condividerle con gli amici.
Tutto questo si traduce per gli sviluppatori nella possibilità di lavorare, seppur con delle limitazioni, con queste informazioni, come ad esempio per le immagini che è possibile recuperare dalla libreria dell'utente oppure salvarle in una speciale cartella.
In questo script si propone una semplice applicazione che, recuperando un feed RSS indicante le famose immagini proposte dal motore di ricerca Bing, permetta poi di salvarle sul dispositivo. Prima di tutto è necessario caricare il feed con la classe WebClient, la più comoda per fare richieste HTTP, come nel codice seguente.
WebClient client = new WebClient(); client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted); client.OpenReadAsync(new Uri("http://feeds.feedburner.com/bingimages"));
Nell'evento OpenReadCompleted si parserizza poi l'XML con LINQ e si carica una alla volta l'immagine attraverso l'URI contenuto nel tag enclosure del feed.
private void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { // Parserizzo l'XML e recupero gli URI Queue<String> images = new Queue<string>( XElement.Load(e.Result).Descendants("enclosure") .Select(ec => ec.Attribute("url").Value)); LoadNextImage(images); }
Il metodo LoadNextImage scoda gli URI ed effettua una chiamata HTTP per ognuno di essi. Nell'evento quello che si ottiene è lo Stream all'immagine che, grazie alla classe MediaLibrary, è possibile salvare con il metodo SavePicture.
private void LoadNextImage(Queue<String> images) { if (images.Count == 0) return; string uri = images.Dequeue(); WebClient client = new WebClient(); client.OpenReadCompleted += (s, e) => { // Salvo l'immagine nella libreria using (MediaLibrary library = new MediaLibrary()) { string name = System.IO.Path.GetFileNameWithoutExtension(uri); library.SavePicture(name, e.Result); } // Carico la prossima immagine this.LoadNextImage(images); }; client.OpenReadAsync(new Uri(uri)); }
La classe MediaLibrary, che appartiene all'assembly Microsoft.Xna.Framework e va quindi referenziato, permette di sfogliare i contenuti multimediali attraverso le collezioni Albums, Songs, Artists, Pictures e SavedPictures per le immagini salvate attraverso il metodo visto in azione nel codice precedente. E' possibile salvare anche un array di byte ed è obbligatorio passare un'immagine già compressa in JPEG. Infine, non è possibile rimuovere le immagini, creare cartelle, ma è permesso solo visualizzarle o salvarne delle nuove.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Dependency injection con Minimal API di ASP.NET Core
Monitorare metriche delle risorse Azure con Load Testing
Utilizzare la libreria EntityFrameworkCore.Exceptions per gestire le eccezioni di Entity Framework Core in modo tipizzato
Configurare EF Core 6 con le minimal API di ASP.NET
Utilizzare le Promise in Javascript - seconda parte
Leggere la configurazione da Azure KeyVault con logica di retry in ASP.NET Core
Definire una tabella come memory optimized su Sql Server tramite EF Core
Fare automaticamente il merge di una pull request con un workflow di GitHub
Organizzare il codice JavaScript utilizzando i moduli
Un confronto tra Framework CSS: Foundation, Bulma, TailwindCSS e SemanticUI
Le novità di Entity Framework Core 6
Eliminare spazio inutilizzato in un Azure Container Registry
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottenere il riferimento alla finestra che ha aperto un'altra finestra con HTML5 e JavaScript
- Abilitare automaticamente Dependabot in tutti i repository di una organizzazione su GitHub
- Creare attributi generici in C#
- Montare blob e file share su Azure App Service
- Migliorare la scalabilità di ASP.NET Core 7 grazie all'output cache