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.
Nessun commento:
Posta un commento