Posted by qmatteoq in Windows Phone Tutorials on Monday 02 April 2012 at 10:00 AM
L’altro giorno ho fatto due chiacchiere via Skype con Nazareno Manco, un amico sviluppatore, che si è trovato ad affrontare un problema nello sviluppo di un’applicazione Windows Phone: la sua necessità era quella di recuperare delle immagini dal web, da visualizzare all’interno di una pagina. Il problema è che queste immagini erano in formato GIF, che non è supportato da Silverlight e, di conseguenza, da Windows Phone.
Facendo una breve ricerca su Internet mi sono imbattuto in questo post di Jaime Rodriguez, in cui viene citata la libreria Image Tools per Silverlight, che offre una serie di controlli e converters che permettono di convertire in tempo reale un’immagine da un formato all’altro. Vediamo come utilizzarla per visualizzare imamgini GIF anche all’interno di un’applicazione Windows Phone.
Innanzitutto dovete includere le varie DLL di cui è composta la libreria all’interno dell’applicazione: il modo più semplice è utilizzare NuGet, così che venga copiato il necessario in automatico.
Dopodichè l’utilizzo di questa libreria si articola in due step:
Entrambe le classi fanno parte del namespace ImageTools.Controls, che deve essere quindi dichiarato nello XAML:
xmlns:imagetools="clr-namespace:ImageTools.Controls;assembly=ImageTools.Controls"
A questo punto potete dichiarare come risorsa (locale nella pagina o globale a livello di applicazione) il converter ImageConverter, come nell’esempio:
<phone:PhoneApplicationPage.Resources>
<imagetools:ImageConverter x:Key="ImageConverter" />
</phone:PhoneApplicationPage.Resources>
Ora vi basta inserire il controllo AnimatedImage, valorizzando la proprietà Source con l’indirizzo dell’immagine GIF e applicando il converter appena dichiarato.
<StackPanel>
<imagetools:AnimatedImage x:Name="Image" Source="{Binding Path=ImageSource, Converter={StaticResource ImageConverter}}" />
</StackPanel>
Nel codice, la proprietà ImageSource è di tipo Uri e punta all’indirizzo di un’immagine GIF di esempio:
ImageSource = new Uri("http://www.nonstopgifs.com/animated-gifs/games/games-animated-gif-002.gif", UriKind.Absolute);
Il trucco per “far funzionare la magia” è l’utilizzo di uno dei decoder messi a disposizione dalla libreria Image Tools: è sufficiente registrarlo all’avvio dell’applicazione, specificando il formato dell’immagine che deve essere decodificato. Nel nostro esempio, dobbiamo utilizzare un GifDecoder, che viene registrato come nell’esempio:
public MainPage()
{
InitializeComponent();
ImageTools.IO.Decoders.AddDecoder<GifDecoder>();
}
A questo punto, grazie ai due controlli utilizzati in precedenza qualsiasi immagine GIF che verrà caricata sarà automaticamente convertita in modo da essere visualizzata: la cosa interessante è che, grazie anche al controllo AnimatedImage, sono supportate le GIF animate, per cui l’animazione verrà visualizzata correttamente.
Di seguito trovate il link per scaricare il progetto di esempio di riferimento di questo post.