C#怎么实现二维码扫描 C#如何用摄像头实时扫描识别二维码和条形码内容【图像】

老墨大大_4385

老墨大大_4385

2026-03-31

766人浏览

原创

推荐使用 zxing.net 读取摄像头帧,需将原始帧转为 bitmap 或灰度图再解码,控制帧率(5–10fps)、避免 ui 线程阻塞、显式设置 characterset="utf-8" 支持中文,注意 wpf 像素格式与线程冻结问题。

c#怎么实现二维码扫描 c#如何用摄像头实时扫描识别二维码和条形码内容【图像】

用 ZXing.Net 读取摄像头帧是最直接的路

不推荐自己写解码逻辑,ZXing.Net 是 C# 生态里最成熟、维护活跃的开源库,支持 QR Code、Code128、EAN-13 等主流码制,且能直接喂入 Bitmap 或 byte[] 帧数据。它不依赖 UI 框架,WinForms、WPF、甚至 .NET 6+ 控制台程序都能用。

常见错误是直接拿 WebCamTexture(Unity)或 MediaCapture(UWP)的原始数据往 ZXing.BarcodeReader.Decode 里塞——类型不匹配,会返回 null 或抛 ArgumentException。必须先转成 Bitmap 或符合 ZXing 要求的灰度 Bitmap。

实操建议:

  • 用 Emgu.CV 或 System.Drawing.Common(注意:.NET Core 3.0+ 需装 NuGet 包并启用 System.Drawing 支持)做帧转换
  • 优先使用 BarcodeReader.Decode(<code>Bitmap),别碰 DecodeMultiple——它开销大,且对单码场景无优势
  • 设置 Options.TryHarder = true 只在低质量画面(模糊、倾斜、反光)下启用,否则识别延迟明显上升

VideoCapture 拿帧时容易卡死或丢帧

Windows 平台用 OpenCvSharp.VideoCapture 或 Emgu.CV.Capture 开摄像头,最常踩的坑是没控制采集频率。默认全速拉帧,CPU 占用飙升,ZXing 解码跟不上,结果就是界面卡、识别滞后、甚至 AccessViolationException。

关键不是“怎么开摄像头”,而是“怎么节制地喂帧”。真实场景中,每秒处理 5–10 帧足够应对大多数二维码扫描需求(人手抖动、对焦时间已占主导)。

实操建议:

  • 用 Stopwatch 控制最小帧间隔,例如:if (sw.ElapsedMilliseconds > 200) { ProcessFrame(); sw.Restart(); }
  • 避免在 UI 线程(如 WinForms 的 Timer.Tick)里直接调 Capture.Read() + Decode()——解码可能耗时 50ms+,UI 会卡顿;改用 Task.Run 拆出解码逻辑
  • 释放资源时务必调 Capture.Dispose(),否则下次打开可能报 Unable to load DLL 'opencv_world455.dll' 类似错误(实际是句柄残留)

中文内容识别失败?多半是编码没设对

二维码里含中文时,ZXing.Net 默认按 ISO-8859-1 解,结果就是乱码或 null。这不是库的问题,是 QR Code 标准允许指定字符集,而生成端(比如微信、草料)通常用 UTF-8,但没显式标记。

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载

不能靠“猜”,得强制告诉解码器用什么编码。但注意:Options.CharacterSet 只影响文本输出,不影响解码过程本身;真正起作用的是 Options.PureBarcode = false(默认值)配合正确的字符集。

实操建议:

  • 初始化 BarcodeReader 时显式设:new BarcodeReader { Options = { CharacterSet = "UTF-8" } }
  • 如果仍乱码,检查二维码是否真含 UTF-8 数据——用手机扫码工具对比验证,排除生成端问题
  • 条形码(如 Code128)不含字符集概念,CharacterSet 对它无效;中文条码基本不存在,遇到大概率是误扫了 QR Code

WPF 里显示预览画面却扫不到码?留心线程与像素格式

WPF 的 WriteableBitmap 和 BitmapSource 是冻结对象,跨线程访问会抛 InvalidOperationException: “The calling thread cannot access this object because a different thread owns it.”。很多人把摄像头帧直接赋给 Image.Source,再在另一个线程解码,结果解码永远返回 null——因为帧数据被冻结后无法被 ZXing 读取像素。

更隐蔽的是像素格式:WPF 默认用 Pbgra32,而 ZXing 要求 Format32bppRgb 或灰度。不转换就传进去,解码器内部会静默失败,不报错也不返回结果。

实操建议:

  • 用 BitmapSource.CopyPixels() 提取 byte[],再用 new Bitmap(width, height, PixelFormat.Format32bppRgb) 构建新位图传给 ZXing
  • 或者绕过 WPF 图像对象,直接用 Emgu.CV.Image<bgr byte></bgr> 处理帧,它原生兼容 OpenCV 流程,省去格式转换烦恼
  • 别在 Dispatcher.Invoke 里做解码——那是为更新 UI 准备的,不是为跑 CPU 密集任务

最难调的永远不是“能不能扫”,而是“为什么看起来在扫,却总没结果”:帧没转对格式、线程锁死了图像内存、字符集设错、或者压根没等对焦完成就急着解码。这些点串起来,才是真实项目里花半天才能定位的问题。

相关专题

更多
c#是什么意思
c#是什么意思

C#是一种通用的面向对象编程语言,它在.NET框架上运行,可用于开发各种类型的应用程序。本专题为大家提供c#相关的各种文章、以及下载和课程。

2023.08.08

1012

5

什么是c#
什么是c#

C#(读作C Sharp)是一种现代的、通用的、面向对象的编程语言。它由微软公司开发,于2000年首次发布,主要用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是一种类型安全和托管的编程语言,它结合了C++的强大性能和C语言的简单易学特点,并引入了许多新的特性和概念,如委托、属性、泛型和异步编程等,以提高开发效率和代码可维护性。

2023.08.31

2911

3

C#中base关键字的用法
C#中base关键字的用法

在C#中,base关键字用于访问当前类的基类成员,这包括基类的字段、属性、方法、构造函数、索引器以及事件。想了解更多C#的相关内容,可以阅读本专题下面的文章。

2024.03.13

885

8

C#Task用法
C#Task用法

Task在C#中是用于表示异步操作的对象,它位于System.Threading.Tasks命名空间中。想了解更多C#中各种用法的相关内容,可以阅读本专题下面的文章。

2024.03.14

2615

11

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

2026.02.03

312

18

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

2026.02.06

389

20

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

2026.03.11

631

24

C# Unity游戏开发与ECS架构实践
C# Unity游戏开发与ECS架构实践

本专题聚焦 C# 在 Unity 游戏开发中的应用,系统讲解 ECS(Entity-Component-System)架构设计、游戏对象管理、性能优化与内存控制策略。通过实际游戏案例,帮助开发者构建高性能、结构清晰的游戏系统,提高游戏开发效率与运行性能。

2026.04.13

329

20

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

4356

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习