winform调用摄像头(AForge)扫描识别条形码(zxing)在文本框中, 完整组件及代码
时间: 2024-01-19 15:02:48 浏览: 129
基于ZXing的条形码解码识别(C# Winform)
3星 · 编辑精心推荐
首先需要在项目中引用 AForge 和 ZXing 的库。
然后在 WinForm 中添加一个按钮和一个文本框,代码如下:
```c#
using AForge.Video;
using AForge.Video.DirectShow;
using ZXing;
public partial class Form1 : Form
{
private FilterInfoCollection videoDevices;
private VideoCaptureDevice videoSource;
private BarcodeReader reader;
public Form1()
{
InitializeComponent();
reader = new BarcodeReader();
videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo device in videoDevices)
{
comboBox1.Items.Add(device.Name);
}
if (comboBox1.Items.Count > 0)
{
comboBox1.SelectedIndex = 0;
}
}
private void button1_Click(object sender, EventArgs e)
{
if (videoSource != null && videoSource.IsRunning)
{
videoSource.SignalToStop();
videoSource = null;
return;
}
videoSource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString);
videoSource.NewFrame += new NewFrameEventHandler(videoSource_NewFrame);
videoSource.Start();
}
private void videoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
try
{
Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
Result result = reader.Decode(bitmap);
if (result != null)
{
SetResultText(result.Text);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private void SetResultText(string text)
{
if (InvokeRequired)
{
Invoke(new Action<string>(SetResultText), text);
}
else
{
textBox1.Text = text;
}
}
}
```
在代码中,首先在构造函数中初始化 BarcodeReader 和视频设备的列表。然后在按钮的点击事件中,根据用户选择的设备来创建视频源。在视频源的 NewFrame 事件中,获取当前帧的图像,并使用 BarcodeReader 来解码该图像中的条形码。如果解码成功,则将结果显示在文本框中。注意在显示结果的时候需要使用 Invoke 函数来在 UI 线程上更新界面。
阅读全文