Roberto Brunetti

Developing in the cloud

.NET Programming

Archives

Windows Phone 7 Camera…from Code

Come abbiamo avuto modo di segnalare in altri blog e articoli precedenti, l’emulatore attuale non espone attraverso il menù start tutte le applicazioni che è in grado di supportare.

La fotocamera è una di queste applicazioni “nascoste”. Da codice possiamo però invocare le API della fotocamera per capire già oggi come si comporterà la nostra applicazione durante l’interazione con la fotocamera stessa.

Partiamo subito dall’esempio (che ho inserito nella sezione media di ThinkMobile.it) creando una nuova applicazione in cui inseriamo alcune semplici pulsanti per attivare la fotocamera

image 

Nel form, anzi nella page, ho inserito due pulsanti Camera e Choose con l’obiettivo, rispettivamente, di attivare la fotocarmera per scattare una foto e di scegliere una foto dagli album dell’utente. Una volta scattata o scelta la foto visualizziamo l’immagine stessa nell’immagine al centro della page.

In questo semplice esempio non ho utilizzato nessuna tecnica di allineamento dei controlli  gestione dell’orientamento; questo il codice:

image

Vediamo il codice del code behind introducendo il concetto di Task: le API espongono varie funzionalità sotto forma di task. Esiste ad esempio un Camera Capture Task implementato nell’omonima classe nell’assembly Microsoft.Phone.Task. La definizione della classe ci mostra i suo metodi pubblici:

image

Molto semplicemente, le immagini fotografate possono essere serializzate e deserializzate via Stream, e, tramite il metodo Show, attivare la fotocamera per scattare una foto.

Nel nostro esempio il codice è molto semplice e attiva la fotocamera (presente in versione simulata anche sull’emulatore)

Vediamo l’esempio: il codice del tasto button1 è il seguente

image

Facciamo F5 e vediamo cosa succede

Una volta scattata la foto, la page riceve la chiamata al metodo OnChooserReturn (il chooser è un concetto molto diffuso sul telefono e consiste nell’attivazione della maschera di scelta di elementi presenti sul mercato, contatti o email o foto come stiamo vedendo)

E’ possibile quindi effettuare l’override del metodo per recuperare il valore restituito dal chooser (nel nostro caso la Photo)

image

Il codice è autoesplicativo: si recupera l’EventArgs come TaskEventArgs<PhotoResult> e dopo il classico controllo sulla compatibilità sul tipo cerchiamo di capire se l’utente ha scelto o ha fatto Cancel. Il risultato di TaskEventArgs<PhotoResult> ha una proprietà, fra le altre, ChosenPhoto che restituisce la photo sotto forma di classico System.IO.Stream.