Работа с веб камерой: чтобы не появлялось окно выбора камеры - C#
Формулировка задачи:
Доброй ночи
Вот такая ситуация возникла.
Я тоже как и DMZ пошел через WinApi при работе с web камерой.
Но возникли следующее вопросы:
1. Вызываем capCreateCaptureWindowA - все ОК.
но при следующем SendMessage(HadleWPic, WM_CAP_DRIVER_CONNECT, Index, 0) - вылазит окно выбора WEB камеры
Вопрос: как сделать так, чтобы это окно не появлялось?
2. Попробовал написать тоже приложение на BCB C++, задержка изображения получилась меньше, более гладкое отображение картинки (хотя думал на шарпе будет лучше). В чем проблема?
Помогите ребята.
Решение задачи: «Работа с веб камерой: чтобы не появлялось окно выбора камеры»
textual
Листинг программы
//Сохраняет каждый десятый кадр
using System.IO;
using AForge.Video;//добавить библиотеку
using AForge.Video.DirectShow;//добавить библиотеку
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
getCamList();
StartFoto();
}
private bool DeviceExist = false;
private FilterInfoCollection videoDevices;
private VideoCaptureDevice videoSource = null;
DirectoryInfo dir;
string dirnew;
private void StartFoto()
{
dir = new DirectoryInfo(Application.StartupPath);
dirnew = dir.CreateSubdirectory("temp").ToString() + "\\";
if (DeviceExist)
{
videoSource = new VideoCaptureDevice(videoDevices[0].MonikerString);
videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
// CloseVideoSource();
videoSource.Start();
}
}
private void getCamList()
{
try
{
videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (videoDevices.Count == 0)
throw new ApplicationException();
DeviceExist = true;
}
catch (ApplicationException)
{
DeviceExist = false;
}
}
int i = 0;
private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
{ ++i;
if (i % 10 == 0)
{
FileStream fs = new FileStream(dirnew + i.ToString() + ".Jpeg", FileMode.Create, FileAccess.ReadWrite);
Bitmap img = (Bitmap)eventArgs.Frame.Clone();
Image im = img;
img.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
private void CloseVideoSource()
{
if (!(videoSource == null))
if (videoSource.IsRunning)
{
videoSource.SignalToStop();
videoSource = null;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
CloseVideoSource();
}