作者:linq
转自:http://zip.nvp.com.tw/forum.php?mod=viewthread&tid=2458&extra=page%3D12
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
using AForge;
using AForge.Imaging;
using AForge.Imaging.Filters;
using AForge.Video;
using AForge.Video.DirectShow;
namespace AForge_DirectShow_CSharp
{
public partial class Form1 : Form
{
VideoCaptureDevice videoSource;
CannyEdgeDetector filter = new CannyEdgeDetector();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "Run")
{
button1.Text = "Stop";
videoSource.Start();
}
else
{
button1.Text = "Run";
videoSource.Stop();
}
}
private void Form1_Load(object sender, EventArgs e)
{
FilterInfoCollection videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
videoSource = new VideoCaptureDevice(videoDevices[0].MonikerString);
videoSource.NewFrame += videoSource_NewFrame;
}
void videoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap sourceImage = eventArgs.Frame;
pictureBox1.Image = (Bitmap)sourceImage.Clone() ;
pictureBox2.Image = filter.Apply(sourceImage.PixelFormat != PixelFormat.Format8bppIndexed ? Grayscale.CommonAlgorithms.BT709.Apply(sourceImage) : sourceImage);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
videoSource.SignalToStop();
}
}
}