Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1907, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

WinRT: cattura di immagini con la Webcam

L'interazione con il dispositivo e le sue periferiche multimediali è alla base di Windows 8 e il Windows Runtime offre delle interessanti API per catturare immagini e video dalla Webcam e dal microfono in modo molto semplice.

Si interagisce col namespace Windows.Media.Capture. Questo namespace mette a disposizione due interessanti classi, CameraCaptureUI e CaptureElement.

In questo post vedremo la CameraCaptureUI per la cattura di foto, dal momento che è la classe di più semplice utilizzo e immediate comprensione.

Questa classe espone un metodo asincrono chiamato CaptureFileAsync, che non solo consente di specificare la modalità di cattura (foto/video), ma anche di salvare automaticamente su disco, nello spazio riservato all'app, il contenuto catturato che poi può essere gestito come oggetto StorageFile.

Per quanto riguarda le foto in modo specifico, è possibile stabilire il formato, la qualità, funzioni a disposizione a seguito del "click" del fotografo.

Supponiamo di avere un controllo Image su una nostra pagina, definito in modo molto semplice, che conterrà il risultato della cattura:

 <Image Name="Image1" />

A livello di code-behind il seguente codice mostra come inizializzare la Webcam per la cattura di immagini in formato .Png alla più alta qualità disponibile. Al termine della cattura, il file originato dalla cattura viene spostato, con un nuovo nome basato sulla data corrente, nella cartella delle immagini:

    Private Async Function CapturePictureAsync() As Task
        Dim camera As New CameraCaptureUI
 
        'Imposta il formato. Possibilità: Jpeg, JpegXR, Png
        camera.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Png
 
        'Imposta la risoluzione più alta
        camera.PhotoSettings.MaxResolution = CameraCaptureUIMaxPhotoResolution.HighestAvailable
 
        Try
            'L'enum CameraCaptureUIMode stabilisce se foto o video
            Dim file As StorageFile = Await camera.CaptureFileAsync(CameraCaptureUIMode.Photo)
            If file IsNot Nothing Then
                'Dopo la cattura, si ottiene un riferimento al file ottenuto
                Using ras As IRandomAccessStream = Await file.OpenAsync(FileAccessMode.Read)
                    'si crea una BitmapImage basata sullo stream
                    Dim source As New BitmapImage
                    source.SetSource(ras)
 
                    'che va a diventare il contenuto del controllo Image
                    Me.Image1.Source = source
                End Using
 
                'Nome file basato su data corrente
                Dim newFileName As String = "Capture_" + Date.Now.Day.ToString + _
                    Date.Now.Month.ToString + Date.Now.Year.ToString + "_" + _
                    Date.Now.Hour.ToString + Date.Now.Minute.ToString + _
                    Date.Now.Second.ToString + ".png"
 
                'Sposta il file. Si può usare CopyAsync per sola copia
                Await file.MoveAsync(KnownFolders.PicturesLibrary, newFileName)
 
            End If
        Catch ex As Exception
 
        End Try
    End Function

E' fondamentale ricordare che bisogna specificare la capability Webcam nel manifest dell'applicazione altrimenti la Webcam non verrà attivata neanche in fase di debug. Inoltre, poichè la nostra app accede alla cartella delle immagini, è necessario specificare anche la capability Picture Library.

Quando eseguite il codice, la Webcam verrà attivata e potrete impostare altre opzioni sulla qualità. A seguito del tocco sullo schermo, sarà possibile accettare, ritagliare o ri-catturare la foto:

Il ritaglio può essere gestito attraverso la proprietà PhotoSettings, che espone AllowCropping per abilitarlo o disabilitarlo, e CroppedSizeInPixels che stabilisce le dimensioni in pixel del ritaglio e CroppedAspectRatio che stabilisce il rapporto di proporzione di ritaglio.

La cattura di video avviene in modo simile, ma ne parleremo nel prossimo post.

Alessandro

Print | posted on giovedì 9 maggio 2013 09:26 | Filed Under [ UWP e Windows Store Apps ]

Powered by:
Powered By Subtext Powered By ASP.NET