ZXing.Delphi 是一个基于著名的开源条码库 ZXing(“Zebra Crossing”)的原生 Object Pascal 库。这个移植版本基于 .Net 的 Redth 移植和 Java 版本。ZXing.Delphi 是第一个原生 FireMonkey 条码库,支持所有 FireMonkey 移动平台,并且从 v3.1 版本开始,也完全支持 Windows VCL 应用程序(不依赖于 FMX.Graphics 单元)。
使用这个库,你可以在不链接外部库的情况下以原生速度进行扫描,避免兼容性问题和依赖性问题。它非常快速,并且兼容 Delphi XE7 至 11 Alexandria,测试范围涵盖 iOS 8.x 至 15.x、Android 32/64 位、Windows 32/64 位和 OSX。ZXing.Delphi 的目标是让条码扫描变得轻松、无痛、快速,并且可以集成到你的 FireMonkey 或原生 Windows(VCL 或 Firemonkey)应用程序中。
你只需将源文件包含到现有项目中,并在项目中构建 ZXing.Delphi 源代码即可。
相机
标准的相机组件在 Android 和 iOS 上可能速度较慢。你可能需要寻找第三方产品或自行开发以获得更流畅的体验。从 Delphi 11 开始,标准相机组件似乎有了很大的改进。
支持的格式
一维产品 | 一维工业 | 二维 |
---|---|---|
UPC-A | Code 39 | QR Code |
UPC-E | Code 93 | Data Matrix(仅支持中心图像) |
EAN-8 | Code 128 | |
EAN-13 | ITF |
功能
-
为所有 VCL 和 FireMonkey 平台(iOS/Android/Windows/OSX)提供原生编译的条码扫描功能。
-
100% 免费,无需许可费用。
-
高速扫描。
-
简单的 API。
-
提供单元测试。
-
提供测试项目。
更新日志
-
v3.9.13:修复了 QR 码的尺寸计算问题,提高了
sizeOfBlackWhiteBlackRunBothWays
的准确性,替换了整数除法为浮点除法。 -
v3.9.12:修复了 Bresenham 算法中的错误。
-
v3.9.11:引入了
FRAMEWORK_FMX
和FRAMEWORK_VCL
的使用。 -
v3.9.8:修复了 DataMatrix 的问题和 QR 码的读取错误,优化了代码。
-
v3.9.7:更新了兼容性修复。
-
v3.9.6:进行了大量修复。
-
v3.9.5:修复了 Android 的溢出问题。
-
v3.9.4:修复了使用
TBarcodeFormat.Auto
时的整数溢出问题。 -
v3.9.3:更新了演示应用的兼容性,修复了边界检查和段错误。
-
v3.9.2:移除了高级测试应用,修复了解码中的访问违规和范围检查错误。
-
v3.9.0:修复了 QR 码在 64 位 Android 和 iOS 上的问题。
-
v3.8.3:修复了内存泄漏问题,简化了高级测试应用。
-
v3.8.1:为高级测试应用添加了 Rio 兼容的 Android 相机优化库。
-
v3.8:修复了演示应用中的权限问题。
-
v3.7:在演示应用中添加了移动用户权限请求。
-
v3.6:修复了 QR 码的错误和内存泄漏问题。
-
v3.5:修复了 QR 码的错误。
-
v3.4:添加了高级测试应用,具有更快的相机性能、声音、条码标记等功能。
-
v3.3.1:修复了 Code39 的错误。
-
v3.3:添加了 UPC-A、UPC-E 和 Code 39。
-
v3.2:添加了 EAN8 和 EAN13。
-
v3.1:添加了 VCL 支持,修复了内存泄漏问题。
-
v3.0:进行了大规模文件结构调整,添加了 DataMatrix 支持。
-
v2.4:修复了 Code128 的问题。
-
v2.3:修复了内存泄漏问题,添加了 Android 支持。
-
v2.2:修复了 iOS 32 位上的崩溃问题。
-
v2.1:实现了 ITF 支持。
-
v2.0:实现了 QR 码支持。
-
v1.1:实现了 Code 93 支持。
-
v1.0:初始上传,实现了 Code 128 支持。
优化建议
-
不要扫描每一帧图像,可以跳过部分帧以节省 CPU 和电量。
-
对于移动设备,尽量避免高分辨率相机设置,例如 640×480 分辨率通常已足够。
-
如果需要扫描特定条码格式(如 EAN-8),请仅设置对应格式以提高效率。
其他条码支持
虽然 ZXing.Delphi 已经支持多种条码格式,但仍有一些格式尚未实现。如果你需要添加新的条码格式,可以通过将 C# 源代码转换为 Pascal 来实现。例如,Code39 的 C# 源代码可以在 GitHub 查看。
如果你希望帮助添加新的条码格式,请告知我们,避免重复工作。你可以参考以下转换步骤:
-
在 .NET 中构建代码。
-
使用 “Reflector 6”(支持 Delphi 反编译功能)将代码反编译为 Delphi.NET。
-
将文件复制到项目中,并将代码从 Delphi.Net 转换为原生 Delphi。
-
使用通用数组列表,这更简单且类型安全。
-
保持原始 .Net 源代码的架构和目录结构。
使用方法
如果你使用的是 Delphi 11.1 之前的版本,需要在项目选项中设置编译器定义(
project options->Delphi compiler->Conditional defines
)。例如:-
FRAMEWORK_VCL
:如果项目使用 VCL 框架,则该变量为true
。 -
FRAMEWORK_FMX
:如果项目使用 FireMonkey(FMX)框架,则该变量为true
。
使用 ZXing.Delphi 的最简单示例如下:
-
将所有文件包含到你的项目中,或使用测试应用中提供的搜索路径。
-
添加
uses
:ScanManager
、ZXing.BarcodeFormat
和ZXing.ReadResult
。 -
添加变量:
FScanManager
和FReadResult
。 -
初始化扫描管理器并执行扫描:
FScanManager := TScanManager.Create(TBarcodeFormat.CODE_128, nil);
FReadResult := FScanManager.Scan(scanBitmap);
在实际应用中,为了保持应用的响应性,扫描操作需要并行运行。测试应用展示了如何实现这一点,它使用了 Firemonkey 的并行库。在测试应用中,相机的分辨率被设置为中等(
FMX.Media.TVideoCaptureQuality.MediumQuality
),这在 XE8 及更高版本中是支持的。需要注意的是,分辨率越高,扫描所需的时间就越长。适当调整分辨率可以提高性能。© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END