在C#中實(shí)現(xiàn)攝像頭實(shí)時預(yù)覽,通常需要使用一些第三方庫,因?yàn)?NET框架本身并不直接支持?jǐn)z像頭的訪問。以下是一個使用AForge.NET庫實(shí)現(xiàn)攝像頭實(shí)時預(yù)覽的示例:
首先,你需要下載并安裝AForge.NET庫。你可以從AForge.NET的官方網(wǎng)站下載它,并按照說明進(jìn)行安裝。
使用Visual Studio創(chuàng)建一個新的Windows窗體應(yīng)用程序項(xiàng)目。
在項(xiàng)目中添加對AForge.Video.DirectShow的引用。你可以在“解決方案資源管理器”中右鍵點(diǎn)擊項(xiàng)目名,然后選擇“添加引用”,在彈出的窗口中找到并添加AForge.Video.DirectShow。
以下是一個簡單的示例代碼,展示了如何使用AForge.NET庫實(shí)現(xiàn)攝像頭的實(shí)時預(yù)覽:
using System;
using System.Drawing;
using System.Windows.Forms;
using AForge.Video;
using AForge.Video.DirectShow;
namespace CameraPreviewApp
{
public partial class MainForm : Form
{
private VideoCaptureDevice videoCaptureDevice;
private Bitmap videoFrame;
public MainForm()
{
InitializeComponent();
// 初始化攝像頭設(shè)備
videoCaptureDevice = new VideoCaptureDevice();
videoCaptureDevice.Initialize();
// 設(shè)置預(yù)覽窗口
videoCaptureDevice.Start();
pictureBoxPreview.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBoxPreview.Size = new Size(videoCaptureDevice.Width, videoCaptureDevice.Height);
// 開始預(yù)覽
videoCaptureDevice.StartPreview();
// 創(chuàng)建一個定時器用于定期更新預(yù)覽幀
Timer timer = new Timer();
timer.Interval = 30; // 設(shè)置更新間隔為30毫秒
timer.Tick += Timer_Tick;
timer.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
if (videoCaptureDevice != null && videoFrame != null)
{
// 獲取當(dāng)前幀
videoCaptureDevice.GetCurrentFrame(videoFrame);
// 將幀轉(zhuǎn)換為Bitmap對象
Bitmap frameBitmap = new Bitmap(videoFrame.Width, videoFrame.Height);
using (Graphics g = Graphics.FromImage(frameBitmap))
{
g.DrawImage(videoFrame, new Rectangle(0, 0, videoFrame.Width, videoFrame.Height));
}
// 更新預(yù)覽窗口
pictureBoxPreview.Image = frameBitmap;
}
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
// 停止預(yù)覽并釋放資源
if (videoCaptureDevice != null)
{
videoCaptureDevice.Stop();
videoCaptureDevice.Dispose();
}
if (videoFrame != null)
{
videoFrame.Dispose();
}
}
}
}
在上面的代碼中,我們首先創(chuàng)建了一個VideoCaptureDevice
對象來初始化攝像頭設(shè)備,并將其連接到DirectShow。然后,我們設(shè)置了一個定時器,用于定期獲取攝像頭的當(dāng)前幀并更新預(yù)覽窗口。最后,在窗體關(guān)閉時,我們停止預(yù)覽并釋放相關(guān)資源。
請注意,這只是一個簡單的示例,實(shí)際應(yīng)用中可能需要根據(jù)具體需求進(jìn)行更多的配置和處理。此外,AForge.NET庫可能還有其他功能和選項(xiàng)可供使用,你可以查閱其官方文檔以獲取更多信息。