在C#中,你可以使用`System.Windows.Media.Capture`命名空间来实现获取摄像头的代码。以下是一个简单的示例代码,演示了如何获取摄像头并显示实时视频流:
```csharp
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Threading;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Media.Effects;
using System.Linq;
using System.IO;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Windows.Threading;
namespace CameraApp
{
public partial class MainWindow : Window
{
private CaptureSource captureSource;
private VideoCaptureDevice videoCaptureDevice;
private VideoBrush videoBrush;
public MainWindow()
{
InitializeComponent();
}
private void StartCamera()
{
if (CaptureDeviceConfiguration.AllowedDeviceAccess || CaptureDeviceConfiguration.RequestDeviceAccess())
{
videoCaptureDevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();
captureSource = new CaptureSource();
captureSource.VideoCaptureDevice = videoCaptureDevice;
videoBrush = new VideoBrush();
videoBrush.SetSource(captureSource);
captureScreen.Fill = videoBrush;
captureSource.Start();
}
}
private void StopCamera()
{
if (captureSource != null && captureSource.State == CaptureState.Started)
{
captureSource.Stop();
captureSource = null;
videoCaptureDevice = null;
videoBrush = null;
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
StartCamera();
}
private void Window_Closing(object sender, CancelEventArgs e)
{
StopCamera();
}
}
}
```
在这个示例中,`MainWindow`是一个WPF窗口,通过`CaptureSource`、`VideoCaptureDevice`、`VideoBrush`等类来实现摄像头的调用和显示。`StartCamera`函数用于开始获取摄像头视频流,`StopCamera`函数用于停止获取摄像头视频流。你可以在`Window_Loaded`事件中调用`StartCamera`函数来开始获取摄像头视频流,在`Window_Closing`事件中调用`StopCamera`函数来停止获取摄像头视频流。
当摄像头视频流被设置为`VideoBrush`后,你可以将`VideoBrush`应用到任何WPF控件的背景中,以显示摄像头实时视频。在这个示例中,我们将`VideoBrush`应用到了名为`captureScreen`的`Grid`的背景中。
请注意,你需要在项目中添加对`PresentationCore`和`System.Windows.Media`程序集的引用,以使用上述命名空间和类。