Silverlight 4 macht die Verwendung von einigen Features überhaupt erst möglich bzw. viel einfacher als bisher gewohnt. Dieses Beispiel zeit, wie einfach auf eine installierte Webcam zugegriffen werden kann.
Dazu wird eine einfache Oberfläche benötigt, die sich in diesem Fall aus einem Grid, einem Rectangle und zwei Buttons zum Aktivieren und Deaktieren der Webcam zusammen setzt:
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Rectangle x:Name="VideoVisualization"
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="30">
<Rectangle.Effect>
<DropShadowEffect BlurRadius="15"
Color="Black"
ShadowDepth="4"/>
</Rectangle.Effect>
</Rectangle>
<Button x:Name="TurnOnButton"
Content="Turn on Webcam"
Grid.Row="1"
Grid.Column="0"
Click="TurnOnButton_Click"
Margin="5"/>
<Button x:Name="TurnOffButton"
Content="Turn off Webcam"
Grid.Row="1"
Grid.Column="1"
Click="TurnOffButton_Click"
Margin="5"/>
</Grid>
Um nun auf die Webcam zuzugreifen werden einige Klassen benötigt:
- CaptureDeviceConfiguration – Stellt den Zugriff auf das Standard-Video Capturing Device zur Verfügung, als auch den Zugriff auf die Audio-Funktionalität. Ebenfalls kann darüber der Zugriff auf die Komponente angefordert werden.
- CaptureSource – Klasse für das tatsächliche Capturing
- VideoBrush – Zeichnet den tatsächlichen Videobereich
Mit diesen Informationen kann eine einfache Klasse zur Steuerung der Webcam entwickelt werden:
public class WebcamHandler
{
private VideoCaptureDevice videoDevice;
private CaptureSource source;
private Shape visualizationElement;
public Shape VisualizationElement
{
get { return visualizationElement; }
set { visualizationElement = value; }
}
public void Start()
{
videoDevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();
if (CaptureDeviceConfiguration.RequestDeviceAccess())
{
if (source != null)
{
source.Start();
return;
}
source = new CaptureSource();
source.VideoCaptureDevice = videoDevice;
VideoBrush videoBrush = new VideoBrush();
videoBrush.SetSource(source);
videoBrush.Stretch = Stretch.UniformToFill;
source.Start();
VisualizationElement.Fill = videoBrush;
}
}
public void Stop()
{
source.Stop();
}
}
Diese Klasse muss nun lediglich im Codebehind innerhalb der Button-Handler eingebunden werden:
public partial class MainPage : UserControl
{
WebcamHandler webcam = new WebcamHandler();
public MainPage()
{
InitializeComponent();
}
private void TurnOnButton_Click(object sender, RoutedEventArgs e)
{
webcam.VisualizationElement = VideoVisualization;
webcam.Start();
}
private void TurnOffButton_Click(object sender, RoutedEventArgs e)
{
webcam.Stop();
}
}
Und schon kann unsere Beispiel-Anwendung gestartet werden. Beim Aufruf von CaptureDeviceConfiguration.RequestDeviceAccess() erscheint ein Dialog, mit dem wir den Zugriff gewähren müssen. Wurde der Zugriff gewährt, startet das Capturing.
Die Demoanwendung gibt es natürlich auch noch als Download.