Latest News

  • Silverlight Online Chat
    Jul 24, 2010

    Today we launch the new Silverlight Live Chat application demonstrating the Liquid RichTextBox and Emoticon replacements.

  • New Super Shoot Em Up 2 Game
    Jun 29, 2010

    Added to the Games section is the new Super Shoot 'Em Up 2 game. Take control of your tank with the aim to defeat the computer controlled opponents. Features all new weapons, levels and Battle Mode!

  • Silverlight 4 Controls V5.3.2 Released
    Jun 28, 2010

    This release contains several fixes raised in the forums.

  • New Sandmania Puzzle Game
    Jun 18, 2010

    Sandmania is the latest game from vectorlight, the aim of this game is to guide sand from the top of the screen to the various colored containers below.

  • New Moon Tower Defense Game
    May 29, 2010

    Added to the Games section is the new Moon Tower Defense game. Defend the Moon from the circling Aliens and Humans.

Web Camera - Capturing still Images

The new CaptureSource object allows you to capture audio and video from your computers webcam and microphone.  In this simple tutorial we will show how to capture an image from a web camera.


The code for this is fairly straight forward, firstly when the Start Camera button is clicked we request the users permission to use the web camera and, once granted, we begin to stream the camera source to a rectangle.  When the Take Picture button is clicked we capture a still image and render it to the screen.

<UserControl x:Class="WebCamera.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="32" />
            <RowDefinition />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Button x:Name="startVideo" Grid.Row="0" Grid.Column="0" Content="Start Camera!" Click="startVideo_Click" />
        <Button x:Name="snap" Grid.Row="0" Grid.Column="1" Content="Take Picture!" Click="snap_Click" IsEnabled="False" />
        <Image x:Name="snapImage" Grid.Row="1" Grid.Column="1" />
        <Rectangle x:Name="video" Grid.Row="1" Grid.Column="0" />
    </Grid>
</UserControl>


Here we have two buttons, an Image and a Rectangle.  The Rectangle will be used to display the live video stream from the camera and the Image will be used to contain the still capture.  The code will do all the hard work here:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;

namespace WebCamera
{
    public partial class MainPage : UserControl
    {
        private CaptureSource cs = null;

        public MainPage()
        {
            InitializeComponent();

            
        }

        private void startVideo_Click(object sender, RoutedEventArgs e)
        {
            bool ok = CaptureDeviceConfiguration.AllowedDeviceAccess;

            if (!ok)
            {
                ok = CaptureDeviceConfiguration.RequestDeviceAccess();
            }

            if (ok)
            {
                cs = new CaptureSource()
                {
                    VideoCaptureDevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice()
                };

                VideoBrush vidBrush = new VideoBrush();
                vidBrush.SetSource(cs);
                video.Fill = vidBrush;
                cs.Start();

                snap.IsEnabled = true;
            }
        }

        private void snap_Click(object sender, RoutedEventArgs e)
        {
            cs.AsyncCaptureImage((bitmap) =>
            {
                Dispatcher.BeginInvoke(() =>
                {
                    snapImage.Source = bitmap;
                });
            });
        }
    }
}


When the Start Camera button is clicked we firstly check the CaptureDeviceConfiguration.AllowedDeviceAccess property to ensure the user has allowed the Silverlight application to use the web camera/mic.  If this property is fase you can display a dialog requesting the users permission for access using:

CaptureDeviceConfiguration.RequestDeviceAccess();

The call to AsyncCaptureImage() returns a WriteableBitmap containing the still image from the camera, if you have the Silverlight 4 runtime installed you can test it here.

Your Comments

No comments found.

 

Post your Comments

Rate this page: 

1 Star 2 Star 3 Star 4 Star 5 Star
10 Ratings / 2.6 Average

Ultimate Gamers

  • 1 stig
  • 2 Gh0sT
  • 3 dhoz
  • 4 janso
  • 5 RadiateLogic
  • 6 dan
  • 7 bigblue531
  • 8 k4si
  • 9 gaaslin
  • 10 Haroldo

  • See the full chart here!

Silverlight Controls

  • Rich TextBox

    Create and edit rich content with this slick and expandable Rich TextBox...

  • TreeView

    This easy to use TreeView comes with drag and drop, sorting, searching and much more...

  • Context Menu

    You too can have cool popup context menus in your Silverlight applications...

  • Resizable Dialog

    Draggable and resizable popup dialogs are what serious Silverlight developers need...

  • Spell Checker

    Real-time spell checking in Silverlight? We did it first here...