Webcam per Silverlight verwenden

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.

Download

Veröffentlicht von Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Cookie-Einstellungen
Auf dieser Website werden Cookie verwendet. Diese werden für den Betrieb der Website benötigt oder helfen uns dabei, die Website zu verbessern.
Alle Cookies zulassen
Auswahl speichern
Individuelle Einstellungen
Individuelle Einstellungen
Dies ist eine Übersicht aller Cookies, die auf der Website verwendet werden. Sie haben die Möglichkeit, individuelle Cookie-Einstellungen vorzunehmen. Geben Sie einzelnen Cookies oder ganzen Gruppen Ihre Einwilligung. Essentielle Cookies lassen sich nicht deaktivieren.
Speichern
Abbrechen
Essenziell (1)
Essenzielle Cookies werden für die grundlegende Funktionalität der Website benötigt.
Cookies anzeigen