导读:本期聚焦于小伙伴创作的《C#怎么生成一个二维码扫描程序?如何调用摄像头实时识别二维码》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么生成一个二维码扫描程序?如何调用摄像头实时识别二维码》有用,将其分享出去将是对创作者最好的鼓励。

在C#中生成一个二维码扫描程序,核心工作是调用摄像头获取实时画面,并使用二维码解码库对每一帧图像进行识别。下面以WinForms为例,使用AForge.NET控制摄像头,用ZXing.Net完成解码。

C#怎么生成一个二维码扫描程序?如何调用摄像头实时识别二维码

一、准备工作

通过NuGet安装以下两个包:

  • AForge.Video.DirectShow:用于枚举和调用摄像头
  • ZXing.Net:用于二维码识别

二、调用摄像头并显示画面

使用FilterInfoCollection获取可用摄像头,用VideoSourcePlayer组件播放视频流。

using AForge.Video;
using AForge.Video.DirectShow;
using System.Windows.Forms;

public class CameraForm : Form
{
    private FilterInfoCollection cameras;
    private VideoCaptureDevice cameraDevice;
    private VideoSourcePlayer videoPlayer;

    public CameraForm()
    {
        videoPlayer = new VideoSourcePlayer();
        videoPlayer.Dock = DockStyle.Fill;
        // 摄像头每取到一帧就触发该事件
        videoPlayer.NewFrame += VideoPlayer_NewFrame;
        this.Controls.Add(videoPlayer);

        // 枚举本机摄像头
        cameras = new FilterInfoCollection(FilterCategory.VideoInputDevice);
        if (cameras.Count > 0)
        {
            cameraDevice = new VideoCaptureDevice(cameras[0].MonikerString);
            videoPlayer.VideoSource = cameraDevice;
            cameraDevice.Start();
        }
    }

    private void VideoPlayer_NewFrame(object sender, ref Bitmap image)
    {
        // image就是当前摄像头帧,识别逻辑在另一方法处理
        ScanQRCode(image);
    }
}

三、识别二维码内容

在每一帧到达时,用ZXing的BarcodeReader对Bitmap进行解码。注意要在后台线程或加锁处理,避免界面卡顿。

using ZXing;
using System.Drawing;

private string lastResult = string.Empty;

private void ScanQRCode(Bitmap frame)
{
    // 配置解码选项,只识别二维码
    BarcodeReader reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat> { BarcodeFormat.QR_CODE };
    reader.AutoRotate = true;

    // 解码当前帧
    Result result = reader.Decode(frame);
    if (result != null && result.Text != lastResult)
    {
        lastResult = result.Text;
        // 识别成功,输出内容
        MessageBox.Show("二维码内容:" + lastResult);
    }
}

四、释放资源

关闭窗体时要停止摄像头,防止设备被占用:

protected override void OnFormClosing(FormClosingEventArgs e)
{
    if (cameraDevice != null && cameraDevice.IsRunning)
    {
        cameraDevice.SignalToStop();
        cameraDevice.WaitForStop();
    }
    base.OnFormClosing(e);
}

五、常见问题

问题说明
找不到摄像头检查FilterInfoCollection数量,确认系统已识别设备
识别太慢可缩小解码图像尺寸,或降低摄像头分辨率
误识别在ScanQRCode中增加去重与间隔时间判断

按照上面的步骤,你就可以用C#生成一个简单的二维码扫描程序,并调用摄像头实时识别二维码。实际项目中还可把识别结果写到数据库或发起网络请求。

C#摄像头调用二维码识别修改时间:2026-07-30 16:51:27

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。