Here's a library you can use from
.NET to access Video Capture Devices, such as webcams, that are attached
to your computer. You can grab frames off of them and use those
frames in your own application.
VideoCaptureNET comes as single DLL that you
can add as a reference to a C#, VB, or Managed C++ project. It is written in a hybrid of
Managed and Unmanaged C++, and leverages DirectShow. However, when
you're working with it, you don't need to know that -- it looks and feels
similar to the other parts of the .NET
VideoCaptureNET is released under the
You are free to use it for non-commercial applications, so long as you
provide credit for using the library -- and
me to tell me how you're using it!
Add the VideoCaptureNET
DLL to your C#, VB, or Managed C++ project, and you will find the
Types you are looking for by using the Allenwood.VideoCaptureNet
// Get the
VideoCaptureDevice vcd = VideoCaptureDevice.GetDefaultDevice();
// Handle the FrameCaptured event to get new frames.
vcd.FrameCaptured += new
// Enable the device to start receiving frames.
vcd.Enabled = true;
Your method to handle
captured video frames can look like this:
OnFrameCaptured(object sender, VideoCaptureFrameEventArgs e)
// You can obtain
the raw RGB bytes from the frame.
byte rawFrameRgbBytes = e.Bytes;
// Or, you can obtain the frame as a System.Drawing.Bitmap.
Bitmap frameAsABitmap = e.GetBitmap();
// You can
brightness, contrast and other settings like this:
vcd.Properties.Brightness.Value = 60;
// You can work with a non-default video
capture device using something like this:
VideoCaptureDeviceDesc devices =
VideoCaptureDevice vcd1 = new VideoCaptureDevice(devices);
// You can change the input resolution to one of the valid options
for the device like this:
Size availableResolutions = vcd.GetResolutionCaps();
vcd.Resolution = availableResolutions;
Demo included in the
I have included in the
download a Visual Studio 2003 project, TestVideoCaptureNet, that enumerates the video
capture devices attached to your computer, lets you view as many
streams as you'd like, and lets you adjust the brightness, contrast,
and resolution of any video stream you are watching.
This is a beta release
I have not thoroughly tested this to ensure
there are no memory leaks on the C++ side!! I've developed it so
that the user of the library has no access to unmanaged memory.
However, I am not 100% sure that there are no leaks involved in the
creation and destruction of the DirectShow graph. If you are good at
this sort of thing, I would be very much obliged if you could check it
over and let me know if there is any hidden nastiness (aside from the
hideous code itself).
Alas, I'm not going to have time to clean this
up any time soon, but I've had a lot of requests for this
library, so I thought I'd make it available. Hopefully you'll find
it useful, but it comes with no guarantees, and -- especially before I
do a thorough memory-leak test -- please understand that this shouldn't
be used in
Once again, I (Rob) hold the copyright on
VideoCaptureNet, as I developed it while not employed by any
organization. I'm releasing it under the GPL, so you are free to
use it for non-commercial applications, and I would be very much obliged
to hear if you find it useful for a project you're working on!
suggestions and contributions.