Sul blog di Daniel Egan, MVP nonché Microsoft Regional Director, c’è un interessante post che illustra come salvare un’immagine nella Media Library di Windows Phone 7.
La procedura illustrata è abbastanza chiara ed è commentata in ogni passaggio significativo, per cui non mi soffermerò su di essa. Nel caso abbiate un oggetto BitmapImage caricato con la vostra immagine (v. esempio) tutto funzionerà tranquillamente.
Tuttavia un oggetto BitmapImage può essere creato passando al costruttore un oggetto URI che identifica la risorsa, sia essa remota (caricata da web) o locale (espressa tramite Pack Uri). In questo caso, però, verrà sollevata un’eccezione di tipo NullReferenceException: Invalid pointer se l’immagine non è stata ancora scaricata completamente (l’operazione è asincrona) quando tentate di salvarla.
Per risolvere tale problema, è sufficiente:
- inizializzare l’oggetto BitmapImage impostando CreateOptions = BitmapCreateOptions.None (il default è DelayCreation):
- var bitmap = new BitmapImage
- {
- CreateOptions = BitmapCreateOptions.None,
- UriSource = uriSource
- };
In questo modo l’immagine verrà inizializzata immediatamente e non quando verrà visualizzata nella UI (quindi, nel nostro caso, mai).
- agganciarsi all’evento ImageOpened per salvare l’immagine scaricata nella Media Library come visto nell’esempio di Daniel Egan:
- bitmap.ImageOpened += (s, e) =>
- {
- var image = (BitmapImage)s;
-
- // Save image to media library...
- };
Il gioco è fatto!
Alla prossima.