#c# #aforge
#c# #aforge
Вопрос:
Я использую видео Aforge для доступа к камере моего компьютера. Все хорошо и работает, но моя проблема сейчас в том, что другое приложение сначала использует камеру. Метод запуска () видео Aforge не дает сбоев, даже если камера используется другим приложением. Есть ли способ проверить, используется ли камера уже в видео AForge?
Комментарии:
1. Если это не завершается сбоем, в чем тогда проблема?
2. Ну, как вы знаете, когда камера используется другим приложением, она не может быть использована приложением. Тогда в этом проблема. Как вы будете информировать пользователя о том, что камера используется другим приложением, когда ваш метод запуска не завершается сбоем, если камера используется другим приложением.
3. Ах, теперь я понял. Таким образом,
Start
метод «кажется» работает, но на самом деле вы не получаете никаких изображений без исключений или чего-либо еще…4. Да, @Fildor, это именно то, что происходит.
5. Я нашел обходной путь. Я просто добавляю проверку, вызвано ли событие newframe.
Ответ №1:
Это обходной путь, который я реализовал для решения этой проблемы:
private async void StartCameraAsync()
{
if (SFilterInfo != null)
{
VideoCaptureDevice = new VideoCaptureDevice(SFilterInfo.MonikerString);
VideoCaptureDevice.NewFrame = new NewFrameEventHandler(VideoCaptureDevice_NewFrame);
VideoCaptureDevice.Start();
await Task.Delay(1000);
//Set false when video started
IsImageGrab =false;
}
}
private void VideoCaptureDevice_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
try
{
//Set true so that you will know that images in the camera is received
IsImageGrab = true;
System.Drawing.Image img = (Bitmap)eventArgs.Frame.Clone();
MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Bmp);
ms.Seek(0, SeekOrigin.Begin);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
bi.Freeze();
}
catch (Exception ex)
{
}
}