Con la versione 4 di
Silverlight, sono state inserite nuove classi, che permettono un utilizzo ancora più professionale della tecnologia Silvierlight. Tra le numerose novità troviamo la
gestione della webcam e dell’audio.
In questo articolo, si forniscono le basi di utilizzo della webcam.
Creazione del progetto
Si crea un nuovo progetto in Silverlight secondo il linguaggio di programmazione di vostro gradimento.
Dopo aver creato il progetto, inserite nella pagina due controlli combobox, che avranno il compito di visualizzare l’elenco delle webcam installate nel pc e dell’audio.
Inserite un controllo Rectable, e tre controlli di tipo pulsante il tutto come mostrato in figura 1.
Figura 1 – La finestra con i controlli
Ora non ci resta che creare le classi per visualizzare la ripresa della webcam.
Passiamo in visualizzazione codice e dichiariamo a livello di classe, sotto la dichiarazione della classe, gli oggetti CaptureSource e ImageBrusce
Qui di seguito si riporta il frammento di codice per entrambi i linguaggi.
VB.Net
Dim CaSourceCattura As New CaptureSource()
Dim imageBrush = New ImageBrush()
C#
CaptureSource CaSourceCattura = new CaptureSource();
ImageBrush imageBrush = new ImageBrush();
VideoCaptureDevice webcam = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();
AudioCaptureDevice audio = CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice();
Nell’evento loadContent della pagina, scriviamo il codice per il caricamento delle combo per la visualizzazione dei nomi delle webcam installate e nomi delle periferiche audio installate.
Qui di seguito si riporta il frammento di codice.
VB.Net
Private Sub LayoutRoot_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles LayoutRoot.Loaded
CmbMicrofono.ItemsSource = CaptureDeviceConfiguration.GetAvailableAudioCaptureDevices()
CmbCam.ItemsSource = CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices()
End Sub
C#
private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
{
CmbMicrofono.ItemsSource = CaptureDeviceConfiguration.GetAvailableAudioCaptureDevices();
CmbCam.ItemsSource = CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices();
}
La classe CaptureDeviceConfiguration, tramite il metodo GetAvailableAudioCaptureDevices elenca tutte le periferiche audio e video installate nel pc.
Nell’evento click del pulsante con la dicitura “Avvia” (o uno dei pulsanti sulla form) dobbiamo eseguire il codice per eseguire la ripresa della webcam.
Qui di seguito, si riporta il codice per il linguaggio di programmazione VB.Net e C# che permette di avviare la ripresa della webcam.
VB.Net
Private Sub BtnAvvia_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles BtnAvvia.Click
Dim webcam = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice()
Dim audio = CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice()
CaSourceCattura.VideoCaptureDevice = webcam
CaSourceCattura.AudioCaptureDevice = audio
Dim webcamBrush = New VideoBrush()
webcamBrush.SetSource(CaSourceCattura)
RctVisualizzaCam.Fill = webcamBrush
If CaptureDeviceConfiguration.RequestDeviceAccess AndAlso (CaSourceCattura.VideoCaptureDevice IsNot Nothing) Then
Try
CaSourceCattura.Start()
Catch ex As InvalidOperationException
' Errore
MessageBox.Show("Impossibile accedere alla webCam")
End Try
End If
End Sub
C#
private void BtnAvvia_Click(object sender, RoutedEventArgs e)
{
CaSourceCattura.VideoCaptureDevice = webcam;
CaSourceCattura.AudioCaptureDevice = audio;
VideoBrush webcamBrush = new VideoBrush();
webcamBrush.SetSource(CaSourceCattura);
RctVisualizzaCam.Fill = webcamBrush;
if (CaptureDeviceConfiguration.RequestDeviceAccess() && CaSourceCattura.VideoCaptureDevice != null)
{
try
{
CaSourceCattura.Start();
}
catch (InvalidOperationException ex)
{
MessageBox.Show("Impossibile accedere alla webCam");
}
}
}
Come si è visto dal frammento di codice precedente, dopo aver assegnato alla proprietà VideoCaptureDevice ed AudioCaptureDevice, gli oggetti per la gestione webcam e audio, si verifica se è accessibile, a questo punto, tramite il metodo Start si avvia la ripresa, che verrà visualizzata nel controllo rettangolo.
Tramite il metodo “Stop” della classe “CaptureSource”si ferma la ripresa, qui di seguito un frammento di codice dell’evento click del pulsante per fermare la ripresa.
VB.Net
Private Sub BtnFerma_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles BtnFerma.Click
If (CaSourceCattura.VideoCaptureDevice IsNot Nothing) Then
CaSourceCattura.Stop()
End If
End Sub
C#
private void BtnFerma_Click(object sender, RoutedEventArgs e)
{
if (CaSourceCattura.VideoCaptureDevice != null)
{
CaSourceCattura.Stop();
}
}
A questo punto non ci rimane che scrivere il codice, per utilizzare la webcam per rilevare i singoli frame, ossia immagini dalla nostra webcam.
Nell’evento click inseriamo il codice per tale operazione. Mentre i frammenti di codice seguenti, illustrano vari aspetti, come la gestione in caso di errore, quando ha completato il rilevamento delle immagini, e tanto altro.
VB.Net
Private Sub BtnRilevaImmagine_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles BtnRilevaImmagine.Click
' Rilevo l'immagine
RctVisualizzaCam.Fill = imageBrush
If CaptureDeviceConfiguration.RequestDeviceAccess AndAlso (CaSourceCattura.VideoCaptureDevice IsNot Nothing) Then
CaSourceCattura.Start()
If (CaSourceCattura.VideoCaptureDevice IsNot Nothing) _
AndAlso (CaSourceCattura.State = CaptureState.Started) Then
CaSourceCattura.CaptureImageAsync()
End If
End If
AddHandler CaSourceCattura.CaptureImageCompleted, AddressOf CaSourceCattura_CaptureImageCompleted
AddHandler CaSourceCattura.CaptureFailed, AddressOf CaSourceCattura_CaptureFailed
End Sub
Gestore di evento CaptureImageCompletend
Private Sub CaSourceCattura_CaptureImageCompleted(ByVal sender As Object, ByVal e As CaptureImageCompletedEventArgs)
imageBrush.ImageSource = e.Result
End Sub
Gestore di evento in caso di fallimento
Private Sub CaSourceCattura_CaptureFailed(ByVal sender As Object, ByVal e As ExceptionRoutedEventArgs)
'Gestione errore
End Sub
C#
private void BtnRilevaImmagine_Click(object sender, RoutedEventArgs e)
{
//Rilevo l'immagine
RctVisualizzaCam.Fill = imageBrush;
if (CaptureDeviceConfiguration.RequestDeviceAccess() && CaSourceCattura.VideoCaptureDevice != null)
{
CaSourceCattura.Start();
if (CaSourceCattura.VideoCaptureDevice != null && CaSourceCattura.State == CaptureState.Started)
{
CaSourceCattura.CaptureImageAsync();
}
}
CaSourceCattura.CaptureImageCompleted += new EventHandler<CaptureImageCompletedEventArgs>(CaSourceCattura_CaptureImageCompleted);
CaSourceCattura.CaptureFailed += new EventHandler<ExceptionRoutedEventArgs>(CaSourceCattura_CaptureFailed);
}
Gestore di evento in caso di completamento positivo
void CaSourceCattura_CaptureImageCompleted(object sender, CaptureImageCompletedEventArgs e)
{
imageBrush.ImageSource = e.Result;
}
Gestore di evento in caso di fallimento
void CaSourceCattura_CaptureFailed(object sender, ExceptionRoutedEventArgs e)
{
//Gestione errore
}
A questo punto non ci resta che testare il nostro applicativo, avviamo il programma e facciamo le prove.
Conclusioni
L’articolo ha voluto fornire le basi per utilizzare la webcam e l’audio nelle applicazioni Silverlight versione 4 o successiva, tramite il linguaggio di programmazione VB.Net e C#.
Le varie classi messe a disposizione offrono al programmatore interessanti possibilità di realizzare applicazioni avanzate.