Click here to Skip to main content
12,630,137 members (26,456 online)
Click here to Skip to main content
Add your own
alternative version

Stats

557.4K views
69.5K downloads
323 bookmarked
Posted

WPF: Webcam Control

, 6 May 2016 CPOL
Rate this:
Please Sign up or sign in to vote.
A WPF UserControl for displaying and recording video from a webcam

WPF_WebcamControl/Screenshot_1.png

Introduction

Webcam is a WPF user control that uses the Expression Encoder SDK to enable easy display of webcam video in a WPF application.

Features

The user control has the following features,

  • Displays webcam video,
  • Enables saving of webcam video (in .wmv format),
  • Enables saving of video snapshots.

Requirements

Webcam

Properties

  Name Description
WPF_WebcamControl/Property.png VideoFileFormat Gets the format in which webcam videos will be saved. This is a dependency property of type String.
WPF_WebcamControl/Property.png SnapshotFormat Gets or sets the format used when saving snapshots of webcam preview. This is a dependency property of type ImageFormat.
WPF_WebcamControl/Property.png VideoDevice Gets or sets the webcam to be used. This is a dependency property of type Microsoft.Expression.Encoder.Devices.EncoderDevice.
WPF_WebcamControl/Property.png AudioDevice Gets or sets the microphone to be used. This is a dependency property of type Microsoft.Expression.Encoder.Devices.EncoderDevice
WPF_WebcamControl/Property.png VideoName Gets or sets the name of the video file – which should not include the file extension. This is a dependency property of type String.
WPF_WebcamControl/Property.png VideoDirectory Gets or sets the folder where the webcam video will be saved. This is a dependency property of type String.
WPF_WebcamControl/Property.png ImageDirectory Gets or sets the folder where video snapshots will be saved. This is a dependency property of type String.
WPF_WebcamControl/Property.png Bitrate Gets or sets the bitrate. This is a dependency property of type Integer. (The default value is 2000).
WPF_WebcamControl/Property.png FrameRate Gets or sets the frame rate, in frames per second. This is a dependency property of type Integer. (The default value is 15).
WPF_WebcamControl/Property.png FrameSize Gets or sets the size of the video profile. This is a dependency property of type System.Drawing.Size. (The default value is 320x240).
WPF_WebcamControl/Property.png IsRecording Gets a value indicating whether video recording is taking place. This is a dependency property of type Boolean.

Methods

  Name Description
WPF_WebcamControl/Method.png StartPreview Starts the display of webcam preview. (Throws a Microsoft.Expression.Encoder.SystemErrorException if a specified device is already in use by another application)
WPF_WebcamControl/Method.png StopPreview Stops the display of webcam preview. (Stops recording of webcam video)
WPF_WebcamControl/Method.png StartRecording Starts the recording of webcam preview to a video file. (Throws a DirectoryNotFoundException if the directory specified in the VideoDirectory property does not exist or if the property is not set).
WPF_WebcamControl/Method.png StopRecording Stops the recording of webcam preview.
WPF_WebcamControl/Method.png TakeSnapshot Saves a snapshot of webcam preview. (Throws a DirectoryNotFoundException if the directory specified in the ImageDirectory property does not exist or if the property is not set).

Example

The following example shows how to use the user control. The example contains a Webcam control, two ComboBoxes for displaying video and audio devices, and several buttons for calling the various methods of the user control.

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:cam="clr-namespace:WebcamControl;assembly=WebcamControl"    
    Title="WPF Webcam" Height="495" Width="353">
    <Window.Resources>
        <DataTemplate x:Key="DevicesListTemplate">
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
    </Window.Resources>
    
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="207"/>
        </Grid.RowDefinitions>
        <cam:Webcam Name="WebcamCtrl" Margin="10" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

        <StackPanel Margin="0,5,0,0" Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Top" Grid.Row="1">
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Height="22">
                <TextBlock Height="22" Width="78" HorizontalAlignment="Left" VerticalAlignment="Top"
                           Text="Video Device" TextAlignment="Left" FlowDirection="LeftToRight" />
                <ComboBox Height="22" Width="210" HorizontalAlignment="Left" VerticalAlignment="Top"
                          x:Name="VideoDevicesComboBox" ItemTemplate="{StaticResource DevicesListTemplate}"/>
            </StackPanel>

            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Height="23" Margin="0,10,0,0">
                <TextBlock Height="22" Width="78" HorizontalAlignment="Left" VerticalAlignment="Top"
                           Text="Audio Device" TextAlignment="Left" FlowDirection="LeftToRight"/>
                <ComboBox HorizontalAlignment="Left" Height="23" Width="210" VerticalAlignment="Bottom"
                          x:Name="AudioDevicesComboBox" ItemTemplate="{StaticResource DevicesListTemplate}"/>
            </StackPanel>
        </StackPanel>

        <Grid Margin="0,0,0,20" HorizontalAlignment="Center" VerticalAlignment="Bottom" Grid.Row="1">
            <Button Content="Start Recording" Height="24" Width="115" Margin="0,40,0,0" HorizontalAlignment="Left" 
                    VerticalAlignment="Top" x:Name="StartRecordingButton" Click="StartRecordingButton_Click"/>
            <Button Content="Stop Recording" Height="24" Width="112" Margin="0,40,0,0" HorizontalAlignment="Right" 
                    VerticalAlignment="Top" x:Name="StopRecordingButton" Click="StopRecordingButton_Click"/>
            <Button Content="Stop Capture" Height="24" Width="112" HorizontalAlignment="Right" 
                    VerticalAlignment="Top" x:Name="StopCaptureButton" Click="StopCaptureButton_Click"/>
            <Button Content="Start Capture" Height="24" Width="115" HorizontalAlignment="Left" 
                    VerticalAlignment="Top" x:Name="StartCaptureButton" Click="StartCaptureButton_Click"/>
            <Button Content="Take Snapshot" Height="24" Width="120" Margin="60,78,60,0" HorizontalAlignment="Center" 
                    VerticalAlignment="Top" x:Name="TakeSnapshotButton" Click="TakeSnapshotButton_Click"/>
        </Grid>
    </Grid>
</Window>
using System.Windows;
using System.Windows.Data;
using Microsoft.Expression.Encoder.Devices;
using WebcamControl;
using System.IO;

namespace WPF_Webcam_CS
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        
        public MainWindow()
        {
            InitializeComponent();                   
                        
            Binding binding_1 = new Binding("SelectedValue");
            binding_1.Source = VideoDevicesComboBox;
            WebcamCtrl.SetBinding(Webcam.VideoDeviceProperty, binding_1);

            Binding binding_2 = new Binding("SelectedValue");
            binding_2.Source = AudioDevicesComboBox;
            WebcamCtrl.SetBinding(Webcam.AudioDeviceProperty, binding_2);

            // Create directory for saving video files
            string videoPath = @"C:\VideoClips";

            if (! Directory.Exists(videoPath))
            {
                Directory.CreateDirectory(videoPath);
            }
            // Create directory for saving image files
            string imagePath = @"C:\WebcamSnapshots";

            if (! Directory.Exists(imagePath))
            {
                Directory.CreateDirectory(imagePath);
            }

            // Set some properties of the Webcam control
            WebcamCtrl.VideoDirectory = videoPath;
            WebcamCtrl.ImageDirectory = imagePath;
            WebcamCtrl.FrameRate = 30;
            WebcamCtrl.FrameSize = new System.Drawing.Size(640, 480);

            // Find available a/v devices
            var vidDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);
            var audDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);
            VideoDevicesComboBox.ItemsSource = vidDevices;
            AudioDevicesComboBox.ItemsSource = audDevices;
            VideoDevicesComboBox.SelectedIndex = 0;
            AudioDevicesComboBox.SelectedIndex = 0;
        }        

        private void StartCaptureButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // Display webcam video
                WebcamCtrl.StartPreview();               
            }
            catch (Microsoft.Expression.Encoder.SystemErrorException ex)
            {
                MessageBox.Show("Device is in use by another application");
            }
        }

        private void StopCaptureButton_Click(object sender, RoutedEventArgs e)
        {
            // Stop the display of webcam video.
            WebcamCtrl.StopPreview();
        }

        private void StartRecordingButton_Click(object sender, RoutedEventArgs e)
        {
            // Start recording of webcam video to harddisk.
            WebcamCtrl.StartRecording();
        }

        private void StopRecordingButton_Click(object sender, RoutedEventArgs e)
        {
            // Stop recording of webcam video to harddisk.
            WebcamCtrl.StopRecording();
        }

        private void TakeSnapshotButton_Click(object sender, RoutedEventArgs e)
        {
            // Take snapshot of webcam video.
            WebcamCtrl.TakeSnapshot();
        }           
       
    }
}
Imports Microsoft.Expression.Encoder.Devices
Imports WebcamControl
Imports System.IO
Imports System.Drawing

Class MainWindow

    Public Sub New()
        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.

        Dim binding_1 As New Binding("SelectedValue")
        binding_1.Source = VideoDevicesComboBox
        WebcamCtrl.SetBinding(Webcam.VideoDeviceProperty, binding_1)

        Dim binding_2 As New Binding("SelectedValue")
        binding_2.Source = AudioDevicesComboBox
        WebcamCtrl.SetBinding(Webcam.AudioDeviceProperty, binding_2)

        ' Create directory for saving video files
        Dim videoPath As String = "C:\VideoClips"

        If Not Directory.Exists(videoPath) Then
            Directory.CreateDirectory(videoPath)
        End If
        ' Create directory for saving image files
        Dim imagePath As String = "C:\WebcamSnapshots"

        If Not Directory.Exists(imagePath) Then
            Directory.CreateDirectory(imagePath)
        End If

        ' Set some properties of the Webcam control
        WebcamCtrl.VideoDirectory = videoPath
        WebcamCtrl.ImageDirectory = imagePath
        WebcamCtrl.FrameRate = 30
        WebcamCtrl.FrameSize = New Size(640, 480)

        ' Find available a/v devices
        Dim videoDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video)
        Dim audioDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio)
        VideoDevicesComboBox.ItemsSource = videoDevices
        AudioDevicesComboBox.ItemsSource = audioDevices
        VideoDevicesComboBox.SelectedIndex = 0
        AudioDevicesComboBox.SelectedIndex = 0
    End Sub

    Private Sub StartCaptureButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        ' Display webcam video
        Try
            WebcamCtrl.StartPreview()
        Catch ex As Microsoft.Expression.Encoder.SystemErrorException
            MessageBox.Show("Device is in use by another application")
        End Try
    End Sub

    Private Sub StopCaptureButton_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
        ' Stop the display of webcam video
        WebcamCtrl.StopPreview()
    End Sub

    Private Sub StartRecordingButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        ' Start recording of webcam video
        WebcamCtrl.StartRecording()
    End Sub

    Private Sub StopRecordingButton_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
        ' Stop recording of webcam video
        WebcamCtrl.StopRecording()
    End Sub

    Private Sub TakeSnapshotButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        ' Take snapshot of webcam video
        WebcamCtrl.TakeSnapshot()
    End Sub
End Class

In the code sample the audio and video devices are listed using the EncoderDevices.FindDevices() method. The EncoderDevices class is found in the Microsoft.Expression.Encoder.Devices namespace, so when using the webcam user control in your project ensure that you have installed Expression Encoder and added a reference to Microsoft.Expression.Encoder.dll. You can do this by right-clicking your project, selecting Add Reference from the context menu, and selecting Microsoft.Expression.Encoder in the Assemblies > Extensions section of the Reference Manager dialog box.

NB: When using Microsoft.Expression.Encoder.dll and WebcamControl.dll in your project ensure that the project build platform is set to x86.

Webcam

The following is the XAML markup for the user control,

<UserControl x:Class="Webcam" 
             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"
             xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
             MinHeight="100" MinWidth="100"
             mc:Ignorable="d">
    <Grid>
        <WindowsFormsHost Name="WinFormsHost" Margin="0" Background="{x:Null}">
            <wf:Panel x:Name="WebcamPanel"/>
        </WindowsFormsHost>
    </Grid>
</UserControl>

To display video from a webcam the user control makes use of the LiveJob class, which is in the Microsoft.Expression.Encoder.Live namespace. LiveJob expose routines for encoding video and audio from a live source such as a webcam. The webcam video is displayed in a WinForms Panel which is hosted in a WindowsFormsHost.

''' <summary>
''' Displays webcam video.
''' </summary>
Public Sub StartPreview()
    Try
        If _videoDevice IsNot Nothing Then
            StopRecording()
            StopPreview()

            Job = New LiveJob
            Dim frameDuration As Long = CLng(FrameRate * Math.Pow(10, 7))

            deviceSource = Job.AddDeviceSource(_videoDevice, _audioDevice)
            deviceSource.PickBestVideoFormat(FrameSize, frameDuration)
            deviceSource.PreviewWindow = New PreviewWindow(New HandleRef(WebcamPanel, WebcamPanel.Handle))

            Job.OutputFormat.VideoProfile = New AdvancedVC1VideoProfile With {.Size = FrameSize,
                    .FrameRate = FrameRate, .Bitrate = New ConstantBitrate(Bitrate)}

            Job.ActivateSource(deviceSource)

            isPreviewing = True
        End If
    Catch ex As SystemErrorException
        Throw New SystemErrorException
    Catch ex As FeatureNotAvailableException
    End Try
End Sub

The LiveJob object is used to save webcam videos using the LiveJob.StartEncoding() method.

''' <summary>
''' Starts the recording of webcam images to a video file.
''' </summary>
Public Sub StartRecording()
    If VideoDirectory = String.Empty Then
        Throw New DirectoryNotFoundException("Video directory has not been specified")
        Exit Sub
    ElseIf Not Directory.Exists(VideoDirectory) Then
        Throw New DirectoryNotFoundException("The specified video directory does not exist")
        Exit Sub
    End If

    If Job IsNot Nothing AndAlso isPreviewing Then
        StopRecording()
        Dim filePath As String

        If String.IsNullOrEmpty(VideoName) Then
            filePath = Path.Combine(VideoDirectory, "Webcam " & TimeStamp() & ".wmv")
        Else
            filePath = Path.Combine(VideoDirectory, VideoName & ".wmv")
        End If

        Dim archiveFormat As New FileArchivePublishFormat(filePath)

        If Job.PublishFormats.Count > 0 Then
            Job.PublishFormats.Clear()
        End If

        Job.PublishFormats.Add(archiveFormat)
        Job.StartEncoding()

        SetValue(IsRecordingPropertyKey, True)
    End If
End Sub

A snapshot of a webcam video is actually just a snapshot of the WinForms Panel,

''' <summary>
''' Takes a snapshot of an webcam image.
''' The size of the image will be equal to the size of the control.
''' </summary>
Public Sub TakeSnapshot()
    Dim imgDir As String = CType(GetValue(ImageDirectoryProperty), String)

    If (imgDir = String.Empty) Then
        Throw New DirectoryNotFoundException("Image directory has not been specified")
        Exit Sub
    ElseIf (Not Directory.Exists(imgDir)) Then
        Throw New DirectoryNotFoundException("The specified image directory does not exist")
        Exit Sub
    End If

    If (job IsNot Nothing AndAlso isPreviewing) Then
        Dim panelWidth As Integer = WebcamPanel.Width
        Dim panelHeight As Integer = WebcamPanel.Height
        Dim imgFormat As ImageFormat = CType(GetValue(SnapshotFormatProperty), ImageFormat)
        Dim filePath As String = Path.Combine(imgDir, "Snapshot " & TimeStamp() & "." & imgFormat.ToString)
        Dim pnt As Point = WebcamPanel.PointToScreen(New Point(WebcamPanel.ClientRectangle.X, WebcamPanel.ClientRectangle.Y))

        Using bmp As New Bitmap(panelWidth, panelHeight)
            Using grx As Graphics = Graphics.FromImage(bmp)
                grx.CopyFromScreen(pnt, Point.Empty, New Size(panelWidth, panelHeight))
            End Using
            bmp.Save(filePath, imgFormat)
        End Using
    End If
End Sub

If you want to take a look at the rest of the code for the usercontrol check out the user control library project in the source download.

Conclusion

I hope you found this article useful. In case of any queries you can leave a comment and I'll do my best to answer.

History

  • 18th Nov, 2011: Initial post
  • 19th Nov, 2011: Updated code
  • 31st Mar, 2012: Added snapshot feature.
  • 17th Nov, 2012: Added FrameRate and FrameSize properties.
  • 30th Oct, 2013: v3.0
  • 24th July, 2014: v3.1,
    • Webcam preview now resizes with control,
    • StartCapture() renamed to StartPreview(),
    • StopCapture() renamed to StopPreview().
  • 6th May, 2016: Added Bitrate and VideoName properties.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Meshack Musundi
Software Developer
Kenya Kenya
Meshack has about 7 years of programming experience initially starting off with Java before shifting to .NET, thanks to the allure of WPF.

Awards;
  • CodeProject MVP 2013
  • CodeProject MVP 2012
  • Best VB.NET article of January 2015
  • Best VB.NET article of August 2013
  • Best VB.NET article of February 2013
  • Best VB.NET article of October 2012
  • Best VB.NET article of July 2012
  • Best VB.NET article of February 2012
  • Best VB.NET article of January 2012
  • Best VB.NET article of November 2011
  • Best VB.NET article of June 2011
  • Best VB.NET article of May 2011
  • Best VB.NET article of March 2011
  • Best VB.NET article of February 2011
  • Best VB.NET article of January 2011
  • Best VB.NET article of December 2010
  • Best VB.NET article of November 2010

You may also be interested in...

Pro
Pro

Comments and Discussions

 
AnswerRe: Video is pixelated and freezes Pin
Meshack Musundi11-May-13 8:07
mvpMeshack Musundi11-May-13 8:07 
QuestionThe name "Webcam" does not exist in the namespace Pin
Ty Morrow25-Apr-13 19:48
memberTy Morrow25-Apr-13 19:48 
AnswerRe: The name "Webcam" does not exist in the namespace Pin
Omar Bsharat30-Apr-14 3:04
memberOmar Bsharat30-Apr-14 3:04 
QuestionPanel.ZIndex is not working Pin
oren_david23-Apr-13 11:52
memberoren_david23-Apr-13 11:52 
AnswerRe: Panel.ZIndex is not working Pin
Meshack Musundi23-Apr-13 21:59
mvpMeshack Musundi23-Apr-13 21:59 
QuestionHow to overlay this webcam control with an image? Pin
Breaka22-Apr-13 10:49
memberBreaka22-Apr-13 10:49 
AnswerRe: How to overlay this webcam control with an image? Pin
Meshack Musundi22-Apr-13 21:05
mvpMeshack Musundi22-Apr-13 21:05 
GeneralMy vote of 5 Pin
amie106217-Apr-13 23:28
memberamie106217-Apr-13 23:28 
GeneralRe: My vote of 5 Pin
Meshack Musundi22-Apr-13 21:06
mvpMeshack Musundi22-Apr-13 21:06 
QuestionTwo cameras with same name(manufacturer) not working Pin
Member 798649417-Apr-13 7:10
memberMember 798649417-Apr-13 7:10 
AnswerRe: Two cameras with same name(manufacturer) not working Pin
Member 421467516-Jan-15 8:25
memberMember 421467516-Jan-15 8:25 
QuestionPause in Recoding Pin
sdimka12-Apr-13 0:54
membersdimka12-Apr-13 0:54 
AnswerRe: Pause in Recoding Pin
Meshack Musundi12-Apr-13 4:19
mvpMeshack Musundi12-Apr-13 4:19 
QuestionWebcam is showing black screen in preview Pin
Member 79864944-Apr-13 3:08
memberMember 79864944-Apr-13 3:08 
I downloaded the application. It is working great!. But it works only for 4 times. Fifth time when I click on Preview button, it shows black screen in preview window. If I close the application and run it again then it works. but only 4 times. It does not work continuously.

Please help. It's an urgent.
AnswerRe: Webcam is showing black screen in preview Pin
Meshack Musundi4-Apr-13 11:52
mvpMeshack Musundi4-Apr-13 11:52 
GeneralRe: Webcam is showing black screen in preview Pin
Member 79864945-Apr-13 0:35
memberMember 79864945-Apr-13 0:35 
GeneralRe: Webcam is showing black screen in preview Pin
Member 79864948-Apr-13 1:56
memberMember 79864948-Apr-13 1:56 
QuestionControl to view webcam images Pin
wendysimvining23-Mar-13 5:52
memberwendysimvining23-Mar-13 5:52 
AnswerRe: Control to view webcam images Pin
Meshack Musundi23-Mar-13 7:21
mvpMeshack Musundi23-Mar-13 7:21 
QuestionQuestion regarding c920 camera and also framesizes Pin
Shaun T Fletcher22-Mar-13 22:38
memberShaun T Fletcher22-Mar-13 22:38 
AnswerRe: Question regarding c920 camera and also framesizes Pin
Meshack Musundi23-Mar-13 7:17
mvpMeshack Musundi23-Mar-13 7:17 
GeneralRe: Question regarding c920 camera and also framesizes Pin
Shaun T Fletcher1-Apr-13 13:25
memberShaun T Fletcher1-Apr-13 13:25 
Questionbitrate Pin
martinmat22-Mar-13 12:08
membermartinmat22-Mar-13 12:08 
AnswerRe: bitrate Pin
Meshack Musundi23-Mar-13 7:08
mvpMeshack Musundi23-Mar-13 7:08 
GeneralRe: bitrate + live stream win server Pin
martinmat24-Mar-13 0:16
membermartinmat24-Mar-13 0:16 
QuestionFull screen Pin
nitin4mail19-Mar-13 3:56
membernitin4mail19-Mar-13 3:56 
AnswerRe: Full screen Pin
Meshack Musundi19-Mar-13 22:00
mvpMeshack Musundi19-Mar-13 22:00 
GeneralRe: Full screen Pin
aevans5727-Mar-13 1:57
memberaevans5727-Mar-13 1:57 
GeneralRe: Full screen Pin
Member 100169331-May-13 23:17
memberMember 100169331-May-13 23:17 
BugMemory leaks Pin
Valomo17-Mar-13 22:51
memberValomo17-Mar-13 22:51 
GeneralRe: Memory leaks Pin
Meshack Musundi17-Mar-13 23:20
mvpMeshack Musundi17-Mar-13 23:20 
GeneralRe: Memory leaks Pin
Valomo18-Mar-13 3:43
memberValomo18-Mar-13 3:43 
GeneralRe: Memory leaks Pin
Meshack Musundi18-Mar-13 11:18
mvpMeshack Musundi18-Mar-13 11:18 
GeneralRe: Memory leaks Pin
joaoclaudino28-Aug-13 12:06
memberjoaoclaudino28-Aug-13 12:06 
QuestionMy screen is black Pin
sudheendra pavan sundar7-Mar-13 23:43
membersudheendra pavan sundar7-Mar-13 23:43 
AnswerRe: My screen is black Pin
Meshack Musundi8-Mar-13 4:29
mvpMeshack Musundi8-Mar-13 4:29 
Questionoverlay image or text Pin
Alberto Molero3-Mar-13 1:31
memberAlberto Molero3-Mar-13 1:31 
AnswerRe: overlay image or text Pin
Meshack Musundi8-Mar-13 4:25
mvpMeshack Musundi8-Mar-13 4:25 
GeneralRe: overlay image or text Pin
Valomo17-Mar-13 22:55
memberValomo17-Mar-13 22:55 
GeneralRe: overlay image or text Pin
Meshack Musundi17-Mar-13 23:30
mvpMeshack Musundi17-Mar-13 23:30 
GeneralRe: overlay image or text Pin
Valomo18-Mar-13 3:36
memberValomo18-Mar-13 3:36 
QuestionC# demo Pin
h-furu23-Feb-13 5:46
memberh-furu23-Feb-13 5:46 
AnswerRe: C# demo Pin
Meshack Musundi24-Feb-13 1:40
mvpMeshack Musundi24-Feb-13 1:40 
GeneralRe: C# demo Pin
h-furu24-Feb-13 4:02
memberh-furu24-Feb-13 4:02 
GeneralMy vote of 5 Pin
sam.hill11-Feb-13 9:01
membersam.hill11-Feb-13 9:01 
GeneralRe: My vote of 5 Pin
Meshack Musundi11-Feb-13 20:54
mvpMeshack Musundi11-Feb-13 20:54 
Questionmultiple cameras of same manufacturer Pin
thomas ls11-Feb-13 4:46
memberthomas ls11-Feb-13 4:46 
AnswerRe: multiple cameras of same manufacturer Pin
Meshack Musundi11-Feb-13 5:42
mvpMeshack Musundi11-Feb-13 5:42 
GeneralMy vote of 5 Pin
Hatmanul5-Feb-13 12:36
memberHatmanul5-Feb-13 12:36 
GeneralRe: My vote of 5 Pin
Meshack Musundi11-Feb-13 5:38
mvpMeshack Musundi11-Feb-13 5:38 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.161205.3 | Last Updated 6 May 2016
Article Copyright 2011 by Meshack Musundi
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid